mysql 一个月没有记录_MySQL选择每月记录,即使数据不存在

本文探讨了两种不同的SQL查询方法,用于统计特定年份各月份的用户注册数量,强调了在不使用临时表的情况下提高效率。通过创建月份的并集,减少了查询的复杂性和数据库负担。第一种方法利用了MONTH函数和STR_TO_DATE进行匹配,第二种方法直接使用日期进行合并。这两种方法都旨在优化查询性能。
摘要由CSDN通过智能技术生成

小编典典

关于效率,我不会说太多,因为我没有针对其他方法进行过测试,但是如果没有临时表,这似乎是一个不错的选择。

SELECT COUNT(u.userID) AS total, m.month

FROM (

SELECT 'Jan' AS MONTH

UNION SELECT 'Feb' AS MONTH

UNION SELECT 'Mar' AS MONTH

UNION SELECT 'Apr' AS MONTH

UNION SELECT 'May' AS MONTH

UNION SELECT 'Jun' AS MONTH

UNION SELECT 'Jul' AS MONTH

UNION SELECT 'Aug' AS MONTH

UNION SELECT 'Sep' AS MONTH

UNION SELECT 'Oct' AS MONTH

UNION SELECT 'Nov' AS MONTH

UNION SELECT 'Dec' AS MONTH

) AS m

LEFT JOIN users u

ON MONTH(STR_TO_DATE(CONCAT(m.month, ' 2013'),'%M %Y')) = MONTH(u.userRegistredDate)

AND YEAR(u.userRegistredDate) = '2013'

GROUP BY m.month

ORDER BY 1+1;

如果您基于日期格式进行并集,甚至可以减少工作量和查询负担。

SELECT COUNT(u.userID) AS total, DATE_FORMAT(merge_date,'%b') AS month, YEAR(m.merge_date) AS year

FROM (

SELECT '2013-01-01' AS merge_date

UNION SELECT '2013-02-01' AS merge_date

UNION SELECT '2013-03-01' AS merge_date

UNION SELECT '2013-04-01' AS merge_date

UNION SELECT '2013-05-01' AS merge_date

UNION SELECT '2013-06-01' AS merge_date

UNION SELECT '2013-07-01' AS merge_date

UNION SELECT '2013-08-01' AS merge_date

UNION SELECT '2013-09-01' AS merge_date

UNION SELECT '2013-10-01' AS merge_date

UNION SELECT '2013-11-01' AS merge_date

UNION SELECT '2013-12-01' AS merge_date

) AS m

LEFT JOIN users u

ON MONTH(m.merge_date) = MONTH(u.userRegistredDate)

AND YEAR(m.merge_date) = YEAR(u.userRegistredDate)

GROUP BY m.merge_date

ORDER BY 1+1;

2020-05-17

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值