MySQL中如何基于日期按月份统计数据表的行数?
嘿,这个按月份统计行数的需求很容易解决!根据你使用的数据库不同,我整理了对应的SQL语句,你可以直接参考:
按月份统计行数的SQL实现
如果你用MySQL/MariaDB
想要JAN-18格式的月份,用DATE_FORMAT函数格式化日期,再分组统计:
SELECT DATE_FORMAT(Date, '%b-%y') AS Month, COUNT(*) AS Count FROM Table1 GROUP BY DATE_FORMAT(Date, '%b-%y') ORDER BY MIN(Date);
要是更习惯2018-01的格式,只需要把DATE_FORMAT的参数改成'%Y-%m'即可。
如果你用SQL Server
生成JAN-18格式
用FORMAT函数来格式化日期:
SELECT FORMAT(Date, 'MMM-yy') AS Month, COUNT(*) AS Count FROM Table1 GROUP BY FORMAT(Date, 'MMM-yy') ORDER BY MIN(Date);
生成2018-01格式
可以用更高效的CONVERT函数:
SELECT CONVERT(VARCHAR(7), Date, 120) AS Month, COUNT(*) AS Count FROM Table1 GROUP BY CONVERT(VARCHAR(7), Date, 120) ORDER BY Month;
当然也可以用FORMAT(Date, 'yyyy-MM')来实现,不过CONVERT在性能上会更优一些。
如果你用Oracle
生成JAN-18格式
用TO_CHAR函数处理日期:
SELECT TO_CHAR(Date, 'MON-RR') AS Month, COUNT(*) AS Count FROM Table1 GROUP BY TO_CHAR(Date, 'MON-RR') ORDER BY MIN(Date);
注:MON会返回大写的月份缩写,想要小写的话换成mon就行;RR用于匹配两位年份。
生成2018-01格式
同样用TO_CHAR调整格式参数:
SELECT TO_CHAR(Date, 'YYYY-MM') AS Month, COUNT(*) AS Count FROM Table1 GROUP BY TO_CHAR(Date, 'YYYY-MM') ORDER BY Month;
所有语句里的ORDER BY都是为了让结果按时间顺序排列,避免月份乱序,你可以根据需要决定是否保留。
内容的提问来源于stack exchange,提问作者Rahul shah
相关产品推荐
相关产品推荐

