我希望按类别获得当月的当前总销售额。我还希望显示所有category_name
(包括汽车),即使item_id
中category_id
sales_tbl
不存在,也不会给出0.00美元的销售额。
category_name | subTotalSales_ofMonth
---------------------------------------
appliances | 33 000
cars | 0
IT | 150 000
运行此
SELECT
c.category_name,
SUM(amount) AS subTotalSales_ofMonth
FROM sales_tbl sa
INNER JOIN item_out_tbl io
ON io.item_id=sa.item_id
INNER JOIN category_tbl c
ON io.category_id=c.category_id
WHERE MONTH(sa.date_sold) >= $month)
GROUP BY io.category_id
给了我
category_name | subTotalSales_ofMonth
---------------------------------------
appliances | 33 000
IT | 150 000
答案 0 :(得分:0)
您应该使用LEFT JOIN
代替:
SELECT c.category_name,
SUM(amount) AS subTotalSales_ofMonth
FROM sales_tbl sa
LEFT JOIN item_out_tbl io ON io.item_id=sa.item_id
LEFT JOIN category_tbl c ON io.category_id=c.category_id
WHERE MONTH(sa.date_sold) >= $month)
GROUP BY c.category_id
答案 1 :(得分:0)
全外连接将为您提供所需的结果(尽管它也会从category_name中获取NULL):
SELECT c.category_name, SUM(amount) AS subTotalSales_ofMonth
FROM sales_tbl sa
FULL OUTER JOIN item_out_tbl io ON io.item_id=sa.item_id
FULL OUTER JOIN category_tbl c ON io.category_id=c.category_id
WHERE MONTH(sa.date_sold) >= $month)
GROUP BY io.category_id
请查看this以获取有关所有联接的指南。
答案 2 :(得分:0)
您需要使用外部联接。由于您的所有类别都存储在category_tbl
表中,因此该表应位于连接的外侧。实现这一目标的一种方法是更改联接的顺序,并在两种情况下使用LEFT JOIN
。您还需要将WHERE
条件移动到ON
子句之一:
SELECT
c.category_name,
SUM(amount) AS subTotalSales_ofMonth
FROM
category_tbl AS c
LEFT JOIN item_out_tbl AS io ON io.category_id = c.category_id
LEFT JOIN sales_tbl AS sa ON io.item_id = sa.item_id
AND MONTH(sa.date_sold) >= $month
GROUP BY
c.category_id
;