我需要为特定部门的每位销售人员在过去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
我可以为其中一个表创建一个视图,但由于我只需要给定部门的记录(有很多),使用一个为所有部门生成结果的视图似乎效率低下。
答案 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()
中的旧行。