【发布时间】:2022-01-18 16:58:32
【问题描述】:
我打算每月进行一次 COUNT。
我想统计从现在到15个月前的数据。我希望在没有数据的月份将其标记为0。
这是我的桌子
人果
| Id | Fruit | People | CreatedAt |
|---|---|---|---|
| 1 | Apple | John | 2020-11-13 |
| 2 | Banana | Katie | 2020-11-25 |
| 3 | Kiwi | Sam | 2021-03-03 |
| 4 | Apple | Katie | 2021-04-12 |
| 5 | Apple | Katie | 2021-04-24 |
| 6 | Apple | John | 2021-04-30 |
| 7 | Banana | Sam | 2021-09-02 |
| 8 | Banana | Katie | 2021-11-11 |
| 9 | Apple | Sam | 2021-12-12 |
| 10 | Kiwi | John | 2021-12-15 |
我想按月知道水果 COUNT,以免人们重叠。
ex)如果你在 4 月(第 4 个月)看 Apple,Katie 选择了两次,John 选择了一次,但是因为 Katie 重叠,COUNT 变成了 2。
我使用了这个查询。
SELECT DATE_FORMAT(createdAt,'%y.%m') m, COUNT(DISTINCT(People)) as count
FROM PeopleFruit
WHERE createdAt > DATE_ADD(NOW(),INTERVAL - 15 MONTH)
AND Fruit = 'Apple'
GROUP BY m;
结果是
| m | count |
|---|---|
| 20.11 | 1 |
| 21.04 | 2 |
| 21.12 | 1 |
但这就是我想要的结果。
| m | count |
|---|---|
| 21.12 | 1 |
| 21.11 | 0 |
| 21.10 | 0 |
| 21.09 | 0 |
| 21.08 | 0 |
| 21.07 | 0 |
| 21.06 | 0 |
| 21.05 | 0 |
| 21.04 | 2 |
| 21.03 | 0 |
| 21.02 | 0 |
| 21.01 | 0 |
| 20.12 | 0 |
| 20.11 | 1 |
| 20.10 | 0 |
我该怎么办?
【问题讨论】:
-
但这是我想要的结果。 生成基准年月表,然后左连接您的数据表和组。
-
DISTINCT不是一个函数,它是一个set quantifer。去掉那些多余的括号,直接写COUNT(DISTINCT People) as count,让代码更清晰! -
你的 MySQL 版本?