【问题标题】:Count the average issue sql统计平均问题sql
【发布时间】:2020-05-09 13:40:47
【问题描述】:

我有一张桌子,上面有工人和他们的薪水。 我试着计算有多少工人的工资高于平均水平 我知道如何显示平均值,我知道如何计算公司有多少工人 但我没有回答这个问题。这是我尝试过的,但出现错误:

SELECT COUNT(workers_id) FROM flight_company.workers
WHERE Salary > AVG(Salary);

【问题讨论】:

    标签: mysql sql count average


    【解决方案1】:

    如果您运行的是 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
    

    【讨论】:

      【解决方案2】:

      你可以使用子查询:

      select count(w.workers_id))
      from flight_company.workers w
      where salary > (select avg(salary) from flight_company.workers);
      

      【讨论】:

      • @user13269342 。 . .这相当于您的答案,您应该接受这个(或其他)答案。
      【解决方案3】:

      您可以使用窗口函数avg()(MySql 8.0+)和聚合来做到这一点:

      select sum(t.flag)
      from (select salary > avg(salary) over () flag from workers) t
      

      【讨论】:

        【解决方案4】:

        这个对我有用

        SELECT COUNT(workers_id) as Num_Above_Average FROM flight_company.workersWHERE Salary > (select avg(salary) from flight_company.workers)

        如何将平均工资列添加到此?

        谢谢

        【讨论】:

        • 看看GMB的回答就知道了。
        • @user13269342 。 .. 正确的做法是接受最适合您的答案(“最佳”可以是主观的,包括解释、首次出现和其他因素)。在这种情况下,这表明您应该接受 Yogesh 的回答。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-06
        • 2021-09-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多