SQL - объединение 2 подзапросов итогового и недельного итогов - PullRequest
2 голосов
/ 24 января 2011

Мне нужно создать отчет об общих продажах и продажах за последние 7 дней для каждого продавца в данном отделе.У меня есть таблица, в которой указаны для каждой продажи дата, сумма и идентификатор продавца, и еще одна таблица, в которой продавцы отображаются по отделам.

Как можно отобразить суммы за неделю и итоги в одном запросе?

Запрос для каждого из них:

SELECT user_id,sum(amount) AS total_amount
FROM sales 
LEFT JOIN users 
ON sales.user_id = users.id 
WHERE users.department = 1
GROUP BY user_id 

и

SELECT user_id,sum(amount) AS total_amount 
FROM sales 
LEFT JOIN users 
ON sales.user_id = users.id 
WHERE users.department = 1 AND date > (NOW()-INTERVAL 1 WEEK) 
GROUP BY user_id 

Я могу сделать это, создав представление для одной из таблиц, но так как мне нужны только записидля данного отдела (их много) использование представления, которое будет генерировать результаты для всех отделов, представляется неэффективным.

1 Ответ

4 голосов
/ 24 января 2011

Вот способ запросить оба с одним сканированием таблицы:

SELECT  user_id
,       sum(amount) as total
,       sum(case when date > (NOW()-INTERVAL 1 WEEK) then amount end) as weekly
FROM    sales
LEFT JOIN 
        users
ON      sales.user_id = users.id
WHERE   users.department = 1
GROUP BY 
        user_id

Это использует case для фильтрации старых строк из второго sum().

...