查询以查找每组的第二高值

Posted

技术标签:

【中文标题】查询以查找每组的第二高值【英文标题】:Query to find second highest value per group 【发布时间】:2021-09-29 17:00:22 【问题描述】:

编写查询提取部门和每个部门的第二高薪

员工

| Column         | Value          |
| -------------- | -------------- |
| employee_id    | int            |
| name           | string         |
| department     | string         |
| employment_type| string         |
| salary         | int            |

Table Image

【问题讨论】:

你有什么问题?听起来像家庭作业。到目前为止,您自己尝试过什么? 【参考方案1】:

使用窗口函数:

select e.department,
       max(case when seqnum = 2 then e.salary end) as second_highest
from (select e.*,
             dense_rank() over (partition by department order by salary desc) as seqnum
      from employee e
     ) e
group by e.department;

您可以阅读有关 dense_rank() 功能的文档。在这种情况下,它将“1”分配给薪水最高的行,将“2”分配给第二高的行,依此类推。

【讨论】:

【参考方案2】:

我认为这可以帮助你。

SELECT department, MAX(salary) AS second_high FROM Employee
WHERE second_high < (SELECT MAX(salary) FROM Employee)
GROUP BY department

【讨论】:

请加解释,让SP能看懂

以上是关于查询以查找每组的第二高值的主要内容,如果未能解决你的问题,请参考以下文章

SQL:查找每组的最大记录[重复]

SQL:查找每组的最大记录[重复]

SQL 窗口函数在订单级别查找每个客户的第二高订单日期

查找时间跨越午夜边界的每组的第一天

MySQL按顺序查找每组最近/最大的记录

第二高的专栏