MySQL同表子查询

标签 mysql subquery

我在编写 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/

相关文章:

php - 将多个表行添加到mysql数据库中

sql - 查找列中的重复条目

mysql - 如何将 FROM 子句中的子查询复制到 2 个别名以进行自连接?

子查询中的 MySQL COUNT 行

sql - 正确使用联接

mysql - UPDATE 查询的 WHERE 子句中的 SELECT 查询

mysql - 错误 SQL 命令 Vb6 : Syntax error or access violation

mysql - MySql中多行的总和

php - php中PDO查询语句期间如何转义?

MySQL - 基于不同列 A 值的平均列 B 值