【发布时间】:2017-10-05 11:04:51
【问题描述】:
我有两个表:一个存储产品 ID,另一个存储每个 product_id 和每个 sale_date 的总销售额
餐桌用品
product_id
----------
1
2
3
餐桌销售
product_id | sale_date | total
-----------+------------+-------
1 | 2017-01-01 | 1
1 | 2017-02-01 | 1
1 | 2017-03-01 | 1
产品 2 和产品 3 没有销售总额。
我想查询销售表,以便在任何产品 id 没有销售的月份前得到 0。 我想要达到的结果是这样的:
product_id | month | total
-----------+------------+-------
1 | 2017-01 | 1
1 | 2017-02 | 1
1 | 2017-03 | 1
2 | 2017-01 | 0
2 | 2017-02 | 0
2 | 2017-03 | 0
3 | 2017-01 | 0
3 | 2017-02 | 0
3 | 2017-03 | 0
现在我做的是这样的:
SELECT DATE_FORMAT(sale_date, "%m-%Y") as month,
Products.product_id,
COUNT(Sales.product_id) as total
FROM products Products
LEFT OUTER JOIN sales Sales
ON Sales.product_id = Products.product_id
GROUP BY Products.product_id, month
我得到的是:
product_id | month | total
-----------+------------+-------
1 | 2017-01 | 1
1 | 2017-02 | 1
1 | 2017-03 | 1
2 | NULL | 0
3 | NULL | 0
当没有任何产品 ID 的销售总额时,我应该修改什么以获得每个月的一行?谢谢
【问题讨论】:
-
我建议你看看日历表。
-
考虑处理表示层/应用程序级代码中的数据显示问题,假设您有(例如,作用于有序数组的简单 PHP 循环)。
-
没有销售,因此没有转换为月份的日期:因此您必须提供缺少的月份