如何使用MySQL查询2021年1月各餐厅名称及对应订单总数?
解决方案
要查询2021年1月各餐厅的名称及对应订单总数,你需要关联restaurants和orders表,同时过滤指定月份的订单并分组统计。以下是可行的SQL语句:
SELECT r.name AS restaurant_name, COUNT(o.id) AS total_orders FROM restaurants r LEFT JOIN orders o ON r.id = o.restaurant_id WHERE EXTRACT(YEAR FROM o.date) = 2021 AND EXTRACT(MONTH FROM o.date) = 1 GROUP BY r.id, r.name ORDER BY total_orders DESC;
关键说明:
- 表关联:用
LEFT JOIN确保即使餐厅在2021年1月没有订单,也会出现在结果中(此时total_orders为0)。如果只需要统计有订单的餐厅,替换成INNER JOIN即可。 - 日期过滤:使用
EXTRACT函数提取年份和月份,精准筛选2021年1月的订单。也可以用o.date BETWEEN '2021-01-01' AND '2021-01-31',但EXTRACT适配性更强,不受不同数据库日期格式的影响。 - 分组统计:按餐厅的
id和name分组,避免因同名餐厅导致统计错误;用COUNT(o.id)统计有效订单数(订单表中无匹配记录时,o.id为NULL,不会被计入统计)。
执行结果(基于你的测试数据):
| restaurant_name | total_orders |
|---|---|
| KFC | 4 |
| McDonald's | 2 |
| Howdy | 1 |
| Kitchen Cuisine | 1 |
| JFC | 0 |
| Hardees | 0 |
内容的提问来源于stack exchange,提问作者Salman
相关产品推荐
相关产品推荐

