如何在单条SQL查询中分别生成两个不同日期的SUM求和值列
双日期SQL查询合并方案
你可以使用条件聚合的方式实现需求,仅需一次表扫描即可得到两列不同日期的求和结果,性能优于两次查询后再关联的方案。
注:原两条SQL中的
group by s.存在语法遗漏,已修正为group by s.id。
合并后的SQL如下:
SELECT s.id, -- 处理10/25/21的求和结果,空值转为NA COALESCE(CAST(SUM(CASE WHEN s.date = '10/25/21' THEN h.val END) AS VARCHAR), 'NA') AS `VAL_1025`, -- 处理10/26/21的求和结果,空值转为NA COALESCE(CAST(SUM(CASE WHEN s.date = '10/26/21' THEN h.val END) AS VARCHAR), 'NA') AS `VAL_1026` FROM identity s INNER JOIN price_net h ON s.date = h.date AND s.num_id = h.num_id AND s.rec_type = h.rec_type WHERE s.date IN ('10/25/21', '10/26/21') AND s.rec_type = 'D' AND s.tier = 'P' GROUP BY s.id
适配说明:
- 如果你使用MySQL数据库,可将
COALESCE替换为IFNULL,执行效果完全一致 - 若业务允许无数据时返回0而非
NA,可删掉CAST转换和COALESCE逻辑,给CASE语句补充ELSE 0即可 - 若需要包含两个日期都无匹配数据的id,可将
INNER JOIN改为LEFT JOIN,并将rec_type、tier的筛选条件移到JOIN关联条件中
内容的提问来源于stack exchange,提问作者Motacular
相关产品推荐
相关产品推荐

