Reputation: 1562
The goal is to display on a grid a list of all sellers with sales and values.
The list of sellers should always be displayed, even when they have no sales.
Something like:
seller | sales | value
John 10 1000
Marie 20 2000
Jamie 15 1500
Arnold 0 0
Peter 0 0
For that the next query works fine:
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
The problem is when I need to filter by date range.
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
Considering that only John and Marie have sales in this date range, the result is:
seller | sales | value
John 5 500
Marie 10 1000
However, the intended result is:
seller | sales | value
John 5 500
Marie 10 1000
Jamie 0 0
Arnold 0 0
Peter 0 0
I appreciated ideas to solve this.
Upvotes: 1
Views: 64
Reputation: 1937
Place condition in And
oprtation instead of where
.
Try below query:
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
Hope this may helpful to you.
Upvotes: 2