然后选择子查询里面的case语句,sqlite bug?

时间:2015-03-15 21:30:42

标签: sql sqlite case

我发现当我尝试在SQL case语句中选择一个列时,除非我将它包装在一个数字函数中,否则它不起作用。最高价(价格)似乎选择了列中的值,而只是价格,或price始终返回空白。

我认为这是一个错误。

这不起作用:

SELECT 
auction,
CASE WHEN auction='1'
    THEN (select max(bid.amount) from bid where bid.auction_id = auction.id)
    ELSE price
END as price_string
FROM product 

这有效:

SELECT 
auction,
CASE WHEN auction='1'
    THEN (select max(bid.amount) from bid where bid.auction_id = auction.id)
    ELSE max(price)
END as price_string 
FROM product 

编辑:修复逗号。

1 个答案:

答案 0 :(得分:2)

这不是错误。

在不起作用的查询中,CASE语句的两半是不兼容的。您有一个聚合函数(MAX(bid.amount)),它为CASE语句的一部分返回单个值,并为{{{}的另一部分返回一个列的名称,该列将返回一个集合。 1}}陈述。你不能混合像这样的聚合和集合。

有效的查询是这样做的,因为CASE语句的两半都返回聚合值,因此是兼容的。

拿一张简单的表格:

CASE

如果我这样查询:

test_table
col1  |  col2
1        7
5        14
8        3
3        9

我会得到这个结果,一套:

SELECT col1 FROM test_table

但如果我这样查询:

col1 
1        
5        
8       
3 

我会得到一个值:

SELECT MAX(col1) FROM test_table