目标是在网格上显示所有具有销售和价值的卖家列表。
即使没有销售,也应始终显示卖家列表。
类似的东西:
seller | sales | value
John 10 1000
Marie 20 2000
Jamie 15 1500
Arnold 0 0
Peter 0 0
为此,下一个查询工作正常:
SELECT tsl.sellers,
COUNT(ts.sales) AS sales,
COALESCE(SUM(ts.value),0) AS value
FROM tab_sellers tsl
LEFT JOIN tab_sales ts ON tsl.id_seller = ts.seller
GROUP BY tsl.seller
问题在于我需要按日期范围进行过滤。
SELECT tsl.sellers,
COUNT(ts.sales) AS sales,
COALESCE(SUM(ts.value),0) AS value
FROM tab_sellers tsl
LEFT JOIN tab_sales ts ON tsl.id_seller = ts.seller
WHERE ts.date_sale BETWEEN '2017-05-01' and '2017-07-04'
GROUP BY tsl.seller
考虑到只有John和Marie在此日期范围内有销售,结果是:
seller | sales | value
John 5 500
Marie 10 1000
但是,预期的结果是:
seller | sales | value
John 5 500
Marie 10 1000
Jamie 0 0
Arnold 0 0
Peter 0 0
我很感激能够解决这个问题。
答案 0 :(得分:2)
将条件置于And
oprtation而不是where
。
尝试以下查询:
SELECT tsl.sellers,
COUNT(ts.sales) AS sales,
COALESCE(SUM(ts.value),0) AS value
FROM tab_sellers tsl
LEFT JOIN tab_sales ts ON tsl.id_seller = ts.seller AND ts.date_sale BETWEEN '2017-05-01' and '2017-07-04'
GROUP BY tsl.seller
希望这对您有所帮助。