【问题标题】:Top value of salary form employees in every country SQL每个国家/地区员工工资表的最高值 SQL
【发布时间】:2016-11-15 02:17:33
【问题描述】:

这是我的数据库:

  • 表格国家:id 整数 (pk),varchar 名称,
  • 表员工:id 整数 (pk)、countryid 整数 (fk)、varchar 名称、整数薪水。

我想显示每个国家/地区薪水最高的员工,但我只能显示一个薪水最高的雇主。

这是我的 SQL 查询:

Select * 
from Employe 
order by Employe.salary 
desc LIMIT 1;

【问题讨论】:

    标签: sql postgresql select greatest-n-per-group


    【解决方案1】:

    试试这个查询

    SELECT Employe.countryid , Max(Employe.salary) from Employe GROUP BY  Employe.countryid 
    

    【讨论】:

    • 当然她可能还想加入国家表来获取国家名称。
    • 感谢作品。但是,如果我想展示来自每个国家/地区的前五名员工怎么办?我不能使用 max()。
    【解决方案2】:

    您可以使用 rank 窗口函数来获取每个国家/地区的“第一位”员工(按薪水):

    SELECT id, c.name, e.name, salary
    FROM   (SELECT id, countryid, name, salary, 
                   RANK() OVER (PARTITION BY countryid ORDER BY salary DESC) rk
            FROM   employee) e
    JOIN   country c ON c.id = e.countryid
    WHERE  rk = 1
    

    【讨论】:

      【解决方案3】:

      在 Postgres 中,您可以使用舒适的 distinct on

      select distinct on (c.name) c.name country, e.name employe, salary
      from employe e
      join countries c on c.id = e.country_id
      order by c.name, salary desc
      

      【讨论】:

      • 而且这个版本智能使用索引。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-04
      • 1970-01-01
      • 2016-10-05
      • 2013-05-23
      • 2019-01-25
      相关资源
      最近更新 更多