我在编写 MySQL 子查询时遇到问题。
SALES 表的列名称为:
sales_date | staff_id | sales_amount
记录每个员工的销售额。
我试图通过此查询实现的是一个表,该表显示所选员工的平均每日销售额以及所有员工的平均每日销售额。我只想显示所选员工有任何销售额的日期。
SELECT staff_id, sales_date, AVG( sales_amount ) AS avgsales, sales_amount
FROM sales
GROUP BY sales_date
WHERE
(SELECT sales_date
FROM sales
WHERE staff_id = $staff_id) // this subquery shows all the dates that staff has records in
我希望它显示如下内容:
Staff_id | Sales date | AverageSales | Employee_sales
---------+------------+--------------+----------------
001 | 2016-04-18 | £2000 | £1800
---------+------------+--------------+----------------
001 | 2016-04-17 | £3405 | £4000
---------+------------+--------------+----------------
001 | 2016-04-16 | £1450 | £1400
---------+------------+--------------+----------------
最佳答案
我使用 Oracle,因此此 MySQL SQL 中可能存在拼写错误。但是,我希望它能正常工作......
您有两个概念:每个人每天的平均销售额和每个用户每天的平均销售额。你想把这两件事结合在一起。您可以轻松完成。
首先,您有每天的平均销售额。
select sales_date, avg(sales_amount) as averagesales
from sales
group by sales_date
现在,您想要每个用户每天的平均销售额。
select staff_id, sales_date, avg(sales_amount) as employeesales
from sales
group by sales_date, staff_id
你希望它们结合在一起。这很容易。
select * from (
select sales_date, avg(sales_amount) as averagesales
from sales
group by sales_date
)a join (
select staff_id, sales_date, avg(sales_amount) as employeesales
from sales
group by sales_date, staff_id
)b on a.sales_date=b.sales_date
这将在一个查询中为您提供 Staff_id、sales_date、当天的平均销售额以及当天的员工平均销售额。您可能想按照自己喜欢的方式订购,限制日期和其他事情。
关于MySQL同表子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36701729/