SQL - 加入总计和每周总计的2个子查询

时间:2011-01-24 10:49:47

标签: sql mysql subquery left-join

我需要为特定部门的每位销售人员在过去7天内创建一份总销售额和销售额的报告。我有一个表格,列出每个销售的销售员的日期,金额和ID,以及另一个将销售人员映射到部门的表格。

如何在单个查询中同时显示每周和总和?

每个的查询是:

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 个答案:

答案 0 :(得分:4)

这是一种通过一次表扫描查询两者的方法:

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()中的旧行。