php – 计算数据表并对其求和,并使用默认值填充空数据
发布时间:2020-12-13 16:10:51 所属栏目:PHP教程 来源:网络整理
导读:我有一个只包含日期数据的表,我想计算数据在同一个月的次数,并且对于那个问题它已经完成了,现在我得到一个新问题,即缺少的月份,这是因为这个月没有数据.现在我想添加默认值为0的空月,即使月份不在表中.任何人都可以根据我的查询帮助我吗? 这是我的数据 star
我有一个只包含日期数据的表,我想计算数据在同一个月的次数,并且对于那个问题它已经完成了,现在我得到一个新问题,即缺少的月份,这是因为这个月没有数据.现在我想添加默认值为0的空月,即使月份不在表中.任何人都可以根据我的查询帮助我吗?
这是我的数据 start_date |end_date ------------------------ 2018-10-01 |2018-10-02 2018-01-04 |2018-02-04 2018-08-01 |2018-10-01 这是我的疑问 select month(month_table) as month_table,sum(cstart) as cstart,sum(cend) as cend from ( (select `start_date` as month_table,1 as cstart,0 as cend from newdata ) union all ( select `end_date`,1 from newdata ) ) dd group by monthname(month_table),month(month_table) order by month(month_table) 结果是 month_table|cstart|cend 1 | 1 | 0 2 | 0 | 1 8 | 1 | 0 10 | 1 | 2 我想添加新的查询,所以我的结果将是 month_table|cstart|cend 1 | 1 | 0 2 | 0 | 1 3 | 0 | 0 4 | 0 | 0 5 | 0 | 0 6 | 0 | 0 7 | 0 | 0 8 | 1 | 0 9 | 0 | 0 10 | 1 | 2 11 | 0 | 0 12 | 0 | 0 这是我的小提琴http://sqlfiddle.com/#!9/c18b5f/3/0 解决方法
你需要一个包含所有月份的桌子.您可以使用UNION ALL使用子查询创建一个ad hoc.然后将count子查询连接到该表.
SELECT m.month month_table,coalesce(s.count,0) cstart,coalesce(e.count,0) cend FROM (SELECT 1 month UNION ALL SELECT 2 month UNION ALL SELECT 3 month UNION ALL SELECT 4 month UNION ALL SELECT 5 month UNION ALL SELECT 6 month UNION ALL SELECT 7 month UNION ALL SELECT 8 month UNION ALL SELECT 9 month UNION ALL SELECT 10 month UNION ALL SELECT 11 month UNION ALL SELECT 12 month) m LEFT JOIN (SELECT month(n.start_date) month,count(*) count FROM newdata n GROUP BY month(n.start_date)) s ON s.month = m.month LEFT JOIN (SELECT month(n.end_date) month,count(*) count FROM newdata n GROUP BY month(n.end_date)) e ON e.month = m.month ORDER BY m.month; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |