如何将MySQL UNION SELECT的两行统计结果转换为列展示?
解决方案:用条件聚合实现列展示
可以通过条件聚合函数(结合SUM()和CASE表达式)将两个统计结果放在同一行的不同列中,避免使用UNION产生多行结果。
修改后的SQL查询
SELECT SUM(a.smd24_18v_act) AS total_all_period, SUM(CASE WHEN MONTH(a.smd24_date) = 1 THEN a.smd24_18v_act ELSE 0 END) AS total_january FROM smd24_log_monthly as a WHERE a.smd24_date BETWEEN '2017-01-01' AND CURRENT_DATE AND YEAR(a.smd24_date) != YEAR(CURRENT_DATE);
代码说明
SUM(a.smd24_18v_act):计算2017年至当前年份前一年的所有数据总和,对应原查询的第一个统计项。SUM(CASE WHEN MONTH(a.smd24_date) = 1 THEN a.smd24_18v_act ELSE 0 END):仅对时间段内1月的数据求和,非1月的数据以0计入,最终得到1月的总计值,对应原查询的第二个统计项。- 统一的
WHERE子句:两个统计共享相同的时间范围过滤条件,无需重复编写,提升查询效率。
内容的提问来源于stack exchange,提问作者Harry
相关产品推荐
相关产品推荐

