【发布时间】:2020-05-09 13:40:47
【问题描述】:
我有一张桌子,上面有工人和他们的薪水。 我试着计算有多少工人的工资高于平均水平 我知道如何显示平均值,我知道如何计算公司有多少工人 但我没有回答这个问题。这是我尝试过的,但出现错误:
SELECT COUNT(workers_id) FROM flight_company.workers
WHERE Salary > AVG(Salary);
【问题讨论】:
我有一张桌子,上面有工人和他们的薪水。 我试着计算有多少工人的工资高于平均水平 我知道如何显示平均值,我知道如何计算公司有多少工人 但我没有回答这个问题。这是我尝试过的,但出现错误:
SELECT COUNT(workers_id) FROM flight_company.workers
WHERE Salary > AVG(Salary);
【问题讨论】:
如果您运行的是 MySQL 8.0,请使用窗口函数:
select avg_salary, count(*) no_workers_above_average
from (select salary, avg(salary) over() avg_salary from flight_company.workers) t
where salary > avg_salary
group by avg_salary
在早期版本中,一个选项是使用聚合查询连接:
select a.avg_salary, count(*) no_workers_above_average
from flight_company.workers w
inner join (select avg(salary) avg_salary from flight_company.workers) a
where w.salary > a.avg_salary
group by a.avg_salary
【讨论】:
你可以使用子查询:
select count(w.workers_id))
from flight_company.workers w
where salary > (select avg(salary) from flight_company.workers);
【讨论】:
您可以使用窗口函数avg()(MySql 8.0+)和聚合来做到这一点:
select sum(t.flag)
from (select salary > avg(salary) over () flag from workers) t
【讨论】:
这个对我有用
SELECT COUNT(workers_id) as Num_Above_Average FROM flight_company.workersWHERE Salary > (select avg(salary) from flight_company.workers)
如何将平均工资列添加到此?
谢谢
【讨论】: