Я считаю, что ответ уже существует в stackoverflow, но я не могу найти правильные ключевые слова. Так что, пожалуйста, помогите.
Продажи таблиц выглядят следующим образом:
state | sales-representative | product | sales
NY | Mike B. | prod-A | 90
FL | David J. | prod-B | 120
FL | Mike B. | prod-A | 15
Мне нужно получить общий объем продаж от такого торгового представителя. Ожидаемые результаты для Майка Б.:
state | product | sales
NY | prod-A | 90
FL | prod-A | 15
NY | prod-B | 0 <--How can I get this record as well?
FL | prod-B | 0
Запрос регулярной суммы возвращает первые 2 записи. Как я могу получить последние 2 записи?
select state, product, sum(sales)
from sales
where sales-representative = 'Mike B.'
group by state, product
SELECT ss.state, sp.product, SUM(sr.sales)
FROM (SELECT DISTINCT state FROM sales) AS ss
CROSS JOIN (SELECT DISTINCT product FROM sales) AS sp
LEFT JOIN sales AS r
AS sr ON ss.state = s.state
AND sp.product = s.product
AND r.'sales-representative' = 'Mike B.'
GROUP BY ss.state, sp.product;
Перекрестное соединение дает вам каждую комбинацию состояния и продукта, а левое соединение дает вам указанные репрезентативные связанные продажи.
Вы можете использовать левое соединение в подзапросе для заявленных и продуктов
select t.state, t.product, sum(sales)
from table1
left join (
select t1.state, t2.product
from t1
cross join (
select product
from t1
) t2
) t on t.state = table1.state and t.product = table1.product
grooup by t.state, t.product