首页 > 解决方案 > 没有联合的 MySQL 联合

问题描述

我想知道过去 7 天内每天有多少用户加入。看起来像这样的东西

| day         | count  |
| 6/19        | 53     |
| 6/18        | 23     |
| 6/17        | 55     |
| 6/16        | 153    |
| 6/15        | 93     |
| 6/14        | 86     |

我会写一个这样的查询:

SELECT SUBDATE(CURRENT_DATE(), INTERVAL 0 DAY) as `day`, count(*) as count FROM my_table WHERE DATE(created_at) = SUBDATE(CURRENT_DATE(), INTERVAL 0 DAY)
UNION ALL
SELECT SUBDATE(CURRENT_DATE(), INTERVAL 1 DAY) as `day`, count(*) as count FROM my_table WHERE DATE(created_at) = SUBDATE(CURRENT_DATE(), INTERVAL 1 DAY)
UNION ALL
SELECT SUBDATE(CURRENT_DATE(), INTERVAL 2 DAY) as `day`, count(*) as count FROM my_table WHERE DATE(created_at) = SUBDATE(CURRENT_DATE(), INTERVAL 2 DAY)

但是想象一下,我不能使用UNION ALLorUNION并且它必须采用相同的表格格式。SQL noob 将如何做到这一点?

谢谢

标签: mysqlsql

解决方案


您查询的WHERE子句应具有created_at大于或等于当前日期减去 6 天的条件,然后按日期分组:

SELECT DATE(created_at) day, COUNT(*) count 
FROM my_table 
WHERE created_at >= SUBDATE(CURRENT_DATE, INTERVAL 6 DAY)
GROUP BY day

推荐阅读