mysql - MYSQL 在不存在的日期中返回零,并且 COUNT 在特定日期存在多少行
问题描述
我有一个名为 calendar 的表,其中包含一列 (mydate DATE)。
MYDATE
2020-01-01
2020-01-02
2020-01-03
...
我还有一个名为 delivery 的表,包含三列(id PK、giorno DATE、totale FLOAT)
ID GIORNO TOTALE
1 2020-01-01 0.10
2 2020-01-01 5
3 2020-01-02 12
4 2020-01-12 5
5 2020-02-02 13.50
这就是我想要获得的:
Day Numbers of orders
2020-01-01 2
2020-01-02 1
2020-01-03 0
2020-01-04 0
2020-01-05 0
2020-01-06 0
2020-01-07 0
2020-01-08 0
2020-01-09 0
2020-01-10 0
2020-01-11 0
2020-01-12 1
...
我正在尝试这个查询:
SELECT c.mydate, IFNULL(d.totale, 0) value
FROM delivery d
RIGHT JOIN calendar c
ON ( c.mydate = d.giorno )
GROUP BY c.mydate
ORDER BY c.mydate
解决方案
考虑:
select c.mydate, count(d.id) number_of_orders
from calendar c
left join delivery d on d.giorno = c.mydate
group by c.mydate
这是通过将日历表与订单表左连接,然后按日期聚合,最后计算订单表中匹配行的数量来实现的。
这与您的原始查询非常接近(尽管它使用left join
而不是right join
),但是这使用聚合函数来计算订单。
推荐阅读
- quarkus - Quarkus OIDC 重定向 uri 绝对路径
- javascript - eslint 显示意外使用逗号,数组的无序列
- javascript - 来自 html 代码的 document.createElement 序列
- javascript - 如何使用 Webpack Module Federation 将不同的项目(如应用程序)集成到单个应用程序中?
- sql - 组内的条件行编号
- runtime - 来自 abort(3) 的中止信号 (SIGABRT)
- spring-security - 什么控制 DaoAuthenticationProvider 中密码的加密?
- java - 我如何关闭 JDialog
- python - 如何通过不和谐用户输入十六进制颜色以嵌入消息
- python - 使操作系统独立的文件路径