group by查询,想把三天数据都显示出来,但是第三天数据为空,需要显示为0,现在只显示前两天的数据,急

selectsum(c_total_call)asc_total_callfromsc_report_daywheredate='今天'ORdate='昨天'ORdate... select sum(c_total_call) as c_total_call from sc_report_day where date = '今天' OR date = '昨天' OR date = '前天' GROUP BY date 展开
 我来答
wyd52x
2016-09-21 · TA获得超过1943个赞
知道小有建树答主
回答量:520
采纳率:0%
帮助的人:635万
展开全部
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
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式