大佬教程收集整理的这篇文章主要介绍了如何从表中选择最大值和第二个最大值并按城市 ID 排序?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有这个员工表。 我需要编写一个 sql 查询,该查询将通过城市 ID(ID 链接到一个包含城市的表。有 5 个城市。)为我带来员工的最高工资和员工的第二高工资。
我的查询如下所示:
SELEct MAX([dbo.employees].Salary) as Salary from [dbo.employees]
where [dbo.employees].Salary not in(SELEct MAX([dbo.employees].Salary) from [dbo.employees])
UNION SELEct MAX([dbo.employees].Salary) from [dbo.employees] group by [dbo.employees].ID
我试图带来最高的并排除最高的但它假设带来总共 7 个值,但它只带来了 5 个。(因为有 5 个城市,但第 5 个没有使用,所以每个城市有 4 个城市和 2 名员工城市除了 1 只有 1 名员工,因此查询假设每个城市给我带来 2 对员工 = 6,其中一个城市只有 1 名员工,因此它将带来唯一可能的值。总体为 7。)
另一个问题是我不知道如何输入 2 列 - 一个用于城市的 ID,第二个用于工资本身,因为它告诉我关于 group by 的某些内容不起作用。
您可以使用 ROW_numbER()
为每个城市创建一个序列,工资最高的取值为 1,次高的取值为 2,依此类推。然后您只需要一个 WHERE
子句。
WITH
ranked AS
(
SELECT
*,ROW_numbER() OVER (PARTITION BY id ORDER BY Salary desc) AS city_salary_id
FROM
dbo.employees
)
SELECT
*
FROM
ranked
WHERE
city_salary_id IN (1,2)
如果多人绑定同一份薪水,它会为你任意挑单,并且总是每个城市返回(最多)2名员工。
在 ORDER BY
中添加一列可以让您更具体地了解如何处理平局,例如 ORDER BY Salary DESC,id ASC
将优先考虑平局中最高的 id
。>
更改为 RANK()
将给予相同的薪水相同的等级,因此如果存在相同的情况,将返回两名以上的员工。
以上是大佬教程为你收集整理的如何从表中选择最大值和第二个最大值并按城市 ID 排序?全部内容,希望文章能够帮你解决如何从表中选择最大值和第二个最大值并按城市 ID 排序?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。