【问题标题】:group by with another row aggregate function与另一个行聚合函数分组
【发布时间】:2022-01-17 23:54:58
【问题描述】:

我正在尝试从部门列中获取最高薪水,但我也 想知道那个部门的人。

我可以在这里做什么?

create table if not exists employee(
    id serial unique,
    firstName varchar (15),
    lastName varchar(15),
    department varchar (20),
    salary int
);

select department, max(salary) from employee
group by department

【问题讨论】:

  • 这能回答你的问题吗? Get top 1 row of each group
  • @Stu dup 不适用于 postgres
  • @LukStorms 同样的原则也适用,事实上接受的答案与你的几乎相同:)
  • 与您的问题无关,但是:Postgres 9.4 是no longer supported,您应该尽快计划升级。

标签: sql postgresql group-by aggregate postgresql-9.4


【解决方案1】:

PostgreSQL 有一个漂亮的 distinct on 语法,你可以使用:

SELECT   DISTINCT ON (department) * 
FROM     employee
ORDER BY department ASC, salary DESC

SQLFiddle demo

【讨论】:

    【解决方案2】:

    计算按薪水降序排列的排名。
    前 1 名将获得排名 1。

    select department, salary, firstName, lastName
    from
    (
        select department, salary, firstName, lastName
        , dense_rank() over (partition by department order by salary desc) as Rnk
        from employee 
    ) q
    where Rnk = 1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-08
      • 2016-07-04
      • 2020-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多