2011-01-24 142 views
2

我需要为给定部门中的每个推销员创建最近7天内总销售额和销售额的报表。我有一个表格,列出每个销售日期,销售员的金额和ID,以及另一张将销售人员映射到部门的表格。SQL - 加入总共和每周总计的2个子查询

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

每个查询是:

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 

我能做到这一点创建一个表视图,但因为我只需要一个给定的部门记录(有很多),使用一种能够为所有部门产生结果的观点似乎效率低下。

回答

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

+0

谢谢!诀窍! – 2011-01-25 10:59:34