程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何从表中选择最大值和第二个最大值并按城市 ID 排序?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决如何从表中选择最大值和第二个最大值并按城市 ID 排序??

开发过程中遇到如何从表中选择最大值和第二个最大值并按城市 ID 排序?的问题如何解决?下面主要结合日常开发的经验,给出你关于如何从表中选择最大值和第二个最大值并按城市 ID 排序?的解决方法建议,希望对你解决如何从表中选择最大值和第二个最大值并按城市 ID 排序?有所启发或帮助;

我有这个员工表。 我需要编写一个 sql 查询,该查询将通过城市 ID(ID 链接到一个包含城市的表。有 5 个城市。)为我带来员工的最高工资和员工的第二高工资。

如何从表中选择最大值和第二个最大值并按城市 ID 排序?

我的查询如下所示:

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,请注明来意。