Mysql 查询不返回前几个月的数据,如果为空,则返回零
查询返回前几个月的所有数据,如果当时没有数据,则必须返回零。相反,它只选择设置数据的行Mysql 查询不返回前几个月的数据,如果为空,则返回零,mysql,Mysql,查询返回前几个月的所有数据,如果当时没有数据,则必须返回零。相反,它只选择设置数据的行 |---------------------|---------------------| | id | added_on | |---------------------|---------------------| | 1 | 2020-02-20 20:00:00 | | 2
|---------------------|---------------------|
| id | added_on |
|---------------------|---------------------|
| 1 | 2020-02-20 20:00:00 |
| 2 | 2020-01-20 20:00:00 |
| 3 | 2019-12-20 20:00:00 |
| 4 | 2020-03-01 20:00:00 |
|---------------------|---------------------|
我提出的问题是:
SELECT
COALESCE(COUNT(id)) AS reg_users,
DATE_FORMAT(added_on, "%Y %b") AS reg_date
FROM users
WHERE added_on
BETWEEN CURDATE() - INTERVAL 12 MONTH AND CURDATE()
GROUP BY YEAR(added_on), MONTH(added_on)
ORDER BY YEAR(added_on) DESC, MONTH(added_on) DESC;
我如何重构上面的代码,以便在没有注册的情况下,它可以显示相应月份的零注册
输出应为:
|---------------------|---------------------|
| reg_users | reg_date |
|---------------------|---------------------|
| 1 | 2020 March |
| 1 | 2020 February |
| 1 | 2020 January |
| 1 | 2019 December |
| 0 | 2019 November |
| 0 | 2019 October |
| 0 | 2019 September |
| 0 | 2019 August |
| 0 | 2019 July |
| 0 | 2019 June |
| 0 | 2019 May |
| 0 | 2019 April |
|---------------------|---------------------|
但是输出是:
|---------------------|---------------------|
| reg_users | reg_date |
|---------------------|---------------------|
| 1 | 2020 March |
| 1 | 2020 February |
| 1 | 2020 January |
| 1 | 2019 December |
虽然我认为在应用程序代码中处理数据显示的问题通常是最好的,但您可能会考虑沿着这些问题来改进您的问题:您必须生成日期列表并加入您的数据。什么是“日期列表”?什么意思?我只想让代码显示没有注册用户的月份,计数为零。“注册用户”。我想你需要这个:“获取两个日期之间的日期列表”