group by查询,想把三天数据都显示出来,但是第三天数据为空,需要显示为0,现在只显示前两天的数据,急
发布网友
发布时间:2022-05-07 05:44
我来回答
共2个回答
热心网友
时间:2022-05-07 07:13
select sum(Case When c_total_call >0 Then c_total_call Else 0 End) as c_total_call from sc_report_day where date = '今天' OR date = '昨天' OR date = '前天' GROUP BY date
你确定你所说的 那个【第三天】在表里是有数据的?
按你说的情况,极有可能是有一条数据为null ,sum 是将分组内的指定列全部相加,如果其中一个为null,那么最后结果也会是null,因为null加一切都是null,不仅限于加,null对所有类型数学计算都是null,
如果允许加负数 改成:
select sum(Case When c_total_call >0 Then c_total_call Else 0 End) as c_total_call from sc_report_day where date = '今天' OR date = '昨天' OR date = '前天' GROUP BY date
另:如果你要找的3天都是连续的,不妨用 date>= '前天' And date <='今天'
假设今天是2016-9-21
select sum(Case When c_total_call >0 Then c_total_call Else 0 End) as c_total_call from sc_report_day where date <= '2016-9-21' And date >= '2016-9-19' GROUP BY date
还有疑问追问我,或问题没得到解决,请将情况以及使用数据库告诉并追问我
追问
现在的结果还是两天的 需要显示这样的数组
第三天的数据 数据库中是空的 ,没有数据
追答
也就是说中间其实是缺数据的是吧?比如有一天可能没有?
是的话,这样写,拼接一个日期表出来,左连接
select
sum(Case When c_total_call is Not Null Then c_total_call Else 0 End)
as c_total_call,day from
(Select '2016-9-21' as day --今天
Union all Select '2016-9-20' --昨天
Union all Select '2016-9-29' --前天
) as d Left Join sc_report_day as rd On d.day=rd.date GROUP BY day