【发布时间】:2019-09-12 17:01:44
【问题描述】:
我想将具有特定值的行汇总为特定列。 早些时候我做了这样的事情:
SELECT date AS 'Date',
sum(CASE license_id WHEN 'a' THEN data.Amount ELSE 0 END) AS 'a',
sum(CASE license_id WHEN 'b' THEN data.Amount ELSE 0 END) AS 'b',
sum(
CASE license_id WHEN '1' THEN data.Amount ELSE 0 END +
CASE license_id WHEN '2' THEN data.Amount ELSE 0 END +
CASE license_id WHEN '3' THEN data.Amount ELSE 0 END
) AS 'c',
sum(
CASE license_id WHEN '10' THEN data.Amount ELSE 0 END +
CASE license_id WHEN '11' THEN data.Amount ELSE 0 END +
CASE license_id WHEN '12' THEN data.Amount ELSE 0 END
) AS 'd'
FROM ...
...
这正是我想要的,但现在我有了一个新场景。 我需要总结不同的温度结果。以下代码不起作用,只是为了解释我想要的:
SELECT date AS 'Date',
sum(CASE license_id WHEN 'b' THEN data.Amount ELSE 0 END) AS 'b',
sum( CASE license_id WHEN '1' THEN data.Amount ELSE 0 END +
CASE license_id WHEN '2' THEN data.Amount ELSE 0 END +
CASE license_id WHEN '3' THEN data.Amount ELSE 0 END +
b
) AS 'c',
FROM ...
...
所以我的问题是因为这只是整个 SELECT 语句的一部分:
- 我可以让
CASE ... WHEN ... THEN ... + CASE ... WHEN ... THEN ... + CASE ... WHEN ... THEN ...更简单吗? - 是否有可能实现我可以在进一步计算中使用临时结果?
提前感谢您的帮助!
【问题讨论】:
-
能否提供表格结构、示例输入数据和示例结果行?每个案例末尾的
+是做什么用的? -
首先,您可以删除部分
ELSE 0,因为它默认为null,即未添加。 -
使用一种情况,而不是把几种情况相加。
-
另外,您可以使用
IN,如CASE license_id IN ('1', '2', '3') THEN ...。
标签: mysql sql innodb conditional-aggregation