为了账号安全,请及时绑定邮箱和手机立即绑定

mysql 查询每个月发布的文章数。月份无数据显示为0。如何写SQL呢

mysql 查询每个月发布的文章数。月份无数据显示为0。如何写SQL呢

PHP
手掌心 2019-03-18 00:05:25
article表 字段id (int),title (string),createtime (时间戳) 比如要查询2015年3月到2017年8月份,每个自然月发布的文章是多少篇。月份没有发布文章的显示为0。比如: Array ( [0] => Array ( [month] => 2015-3 [times] => 0 ) [1]=> Array ( [month] => 2015-4 [times] => 4 ) [2]=> Array ( [month] => 2015-5 [times] => 0 ) ... [...]=> Array ( [month] => 2017-8 [times] => 4 ) )
查看完整描述

6 回答

?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

select DATE_FORMAT(createtime,'%Y-%m'), count(*) from article group by DATE_FORMAT(createtime,'%Y-%m')
针对没有数据的月份,可以放在程序里循环处理一下

查看完整回答
反对 回复 2019-03-18
?
慕沐林林

TA贡献2016条经验 获得超9个赞

效率比较好的建议是程序算出开始时间和结束时间,数据库只是单纯的between...and...,然后可以对结果使用redis缓存下来

查看完整回答
反对 回复 2019-03-18
?
慕标琳琳

TA贡献1830条经验 获得超9个赞

select month ( create_time ) ,count(*) from orders where year ( create_time) = 2015 group by month (create_time) 

我表里的时间存的是DATETIME 2015-05-05 23:59:59
楼上的兄弟说的很明白,没有数据,就没有默认值一说

查看完整回答
反对 回复 2019-03-18
?
回首忆惘然

TA贡献1847条经验 获得超11个赞

首先一点,没有数据的话,mysql也不会有数据,所以会缺失月份。尼需要用程序填充

SELECT COUNT(1) AS total,FROM_UNIXTIMESTAMP(createtime,'%Y-%m') as m from article GROUP BY m ORDER BY m ASC
查看完整回答
反对 回复 2019-03-18
  • 6 回答
  • 0 关注
  • 3153 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信