我发现当我尝试在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
编辑:修复逗号。
答案 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