我对SQL中的IF条件有一些疑问 是否可以在SQL查询中使用下一个语法?关于if by group by statement
,我很有趣"SELECT * FROM TABLE WHERE... IF(order_id !=0, GROUP BY order_id, GROUP BY other_field)"
答案 0 :(得分:3)
SELECT *
FROM TABLE
GROUP BY case when order_id <> 0
then order_id
else other_field
end
答案 1 :(得分:1)
首先,您不应该select *
与group by
一起做case
。在大多数数据库中,(通常)查询将被拒绝并出现语法错误。
其次,SQL标准是select (case when order_id != 0 then order_id end) as order_id,
(case when order_id = 0 then other_field end) as other_field,
count(*)
from table t
group by (case when order_id != 0 then order_id end),
(case when order_id = 0 then other_field end);
。
也许你想要这样的东西:
case
请注意,我将逻辑拆分为两个{{1}}语句。如果字段的类型不相同,这只会更容易 - 您不必处理如何从一种类型转换为另一种类型的事情。
答案 2 :(得分:0)
您可以使用CASE语句。像这样的东西 -
SELECT *
FROM TABLE
WHERE...
GROUP BY CASE WHEN order_id !=0 THEN order_id
ELSE other_field END;