我已经a table如下:
id group1 group2 is_bar amount
1 a bar1 true 100
2 a bar2 true 200
3 a baz false 150
4 a baz false 250
5 b bar1 true 50
每次
is_bar
为真时,我都要替换group2
中的值并对amount
求和,结果是:group1 group2 amount
a bar 300
a baz 400
b bar 50
我现在使用一个子查询,然后按表中的每一列进行分组!但这对我来说有点怪:
SELECT group1, group2, sum(amount) FROM
(
SELECT group1,
CASE WHEN is_bar THEN 'bar' ELSE group2 END as group2,
amount
FROM foo
) new_foo
GROUP BY group1, group2
ORDER BY group1, group2;
有聪明人解决这个问题吗?
最佳答案
我认为这应该管用:
SELECT
group1
, CASE WHEN is_bar THEN 'bar' ELSE group2 END as group2
, SUM(AMOUNT)
FROM foo
GROUP BY group1, CASE WHEN is_bar THEN 'bar' ELSE group2 END
正如@Patrick在评论中提到的,您可以用
GROUP BY
替换GROUP BY 1, 2
中非常长的条件。这将自动引用
SELECT
语句中的第1列和第2列(第一列和第二列),查询将具有相同的输出。但是,如果您将不同的列添加为第一列,则必须通过更改或添加表示第一列的数字/条件来确保GROUP BY
仍按预期工作。