查找每个部门的最高薪水 - 是否有更有效的查询?

2023-12-14

我有一个有效的查询,但我怀疑我这样做效率低下。是否有更优雅的方法来查找每个部门的最高薪水以及赚取该薪水的员工?

我正在做一个 cte 来查找每个部门 ID 的最高工资,然后通过匹配工资和部门 ID 将其与员工数据结合起来。我有下面的代码来构建/填充表和最后的查询。

CREATE TABLE employee (
emplid SERIAL PRIMARY KEY,
name VARCHAR NOT NULL,
salary FLOAT NOT NULL,
depid INTEGER
);

INSERT INTO employee (name, salary, depid)
VALUES
('Chris',23456.99,1),
('Bob',98756.34,1),
('Malin',34567.22,2),
('Lisa',34967.73,2),
('Deepak',88582.22,3),
('Chester',99487.41,3);

CREATE TABLE department (
depid SERIAL PRIMARY KEY,
deptname VARCHAR NOT NULL
);

INSERT INTO department (deptname)
VALUES
('Engineering'),
('Sales'),
('Marketing');

--top salary by department
WITH cte AS (
SELECT d.depid, deptname, MAX(salary) AS maxsal
FROM employee e
JOIN department d ON d.depid = e.depid
GROUP BY d.depid, deptname
)
SELECT cte.deptname, e.name, cte.maxsal
FROM cte
JOIN employee e ON cte.depid = e.depid
AND e.salary = cte.maxsal
ORDER BY maxsal DESC;

这是目标结果:

“营销”“切斯特”“99487.41” “工程”“鲍勃”“98756.34” “销售”“丽莎”“34967.73”


在 Postgres 中,这可以使用以下方法解决distinct on ()操作员:

SELECT distinct on (d.depid) d.depid, deptname, e.name, e.salary AS maxsal
FROM employee e
  JOIN department d ON d.depid = e.depid
order by d.depid, e.salary desc;

或者您可以使用窗口函数:

select depid, deptname, emp_name, salary
from (
  SELECT d.depid, 
         deptname, 
         e.name as emp_name, 
         e.salary, 
         max(e.salary) over (partition by d.depid) AS maxsal
  FROM employee e
    JOIN department d ON d.depid = e.depid
) t
where salary = maxsal;

网上例子:https://rextester.com/MBAF73582

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

查找每个部门的最高薪水 - 是否有更有效的查询? 的相关文章

随机推荐

  • 按父组和子项对父子记录进行排序

    我需要按特定的两个相关列对查询结果进行排序 我的桌子是 Row no Col 1 Col 2 Col 3 Col 4 1 1 X 1 5 2 2 Y 1 6 3 5 Z 2 7 4 6 T 2 0 5 7 T 3 0 6 6 W 2 0 中
  • 寻找 snprintf() 的 C 源代码

    我需要将 snprintf 移植到另一个不完全支持 GLibC 的平台 我正在 Glibc 2 14 源代码中寻找底层声明 我跟踪了许多函数调用 但卡在了 vfprintf 上 然后它似乎调用 IO vfprintf 但我找不到定义 宏可能
  • 具有当前用户 ID 的角色分配

    我使用 Azure AD 应用程序注册原则通过 Azure 资源管理器部署资源 以通过管道进行部署 在部署过程中 我需要为部署用户设置一些权限 以确保它有足够的权限 例如上传文件 由于我使用不同的原则 并且我没有在代码中管理这些原则 因此我
  • Visual Studio 2008 安装程序,自定义操作。断点未触发

    我有一个带有自定义操作项目的安装程序 我希望该操作在安装时触发 当我向事件日志写入内容时 该操作会触发 它运行得很好 但我确实需要调试该文件 因为操作非常复杂 所以我有以下安装程序类 namespace InstallerActions u
  • 使用 xpath 获取节点的第 N 个子节点

    我的示例输入 XML 是
  • 如何用编译时泛型验证替换运行时instanceof检查

    对于真正的 Java 泛型专家来说 有一个小难题 假设我有以下两个接口 interface Processor void process Foo foo interface Foo Processor getProcessor 例如 以下两
  • 对列进行排序并选择每组 pandas 数据框中的前 n 行

    我有一个像这样的数据框 mainid pidx pidy score 1 a b 2 1 a c 5 1 c a 7 1 c b 2 1 a e 8 2 x y 1 2 y z 3 2 z y 5 2 x w 12 2 x v 1 2 y
  • Intent不设置相机参数

    我正在打开相机应用程序作为我的应用程序的外部意图 我使用以下代码来调用相机 以下是我的条件 它应该打开前置摄像头 最高的图像质量 闪光灯必须打开 以下是我的代码 Intent action new Intent android media
  • JQplot 在 IE 上的打印问题

    我正在尝试打印我的图表 它可以通过 Firefox 和 Chrome 正确打印 但如果我尝试用 IE 打印它 它会向我显示图表后面的图表画布 HTML 标签 正如你在图片中看到的那样 并且它还将图表轴文本放置在整个图表上 我尝试了下面的解决
  • 如何在C#中处理枚举0(CA1008讨论)

    Rule CA1008指定所有枚举都应该有一个0应该命名的值Unknown 我们不在这里讨论标志 我理解您想要防止未初始化的值自动获得含义的原因 假设我定义以下枚举 enum Gender Male Female class Person
  • 在反应中从另一个钩子调用钩子

    我对反应还很陌生 并试图简化一些开发 我有这个自定义挂钩useApi import useState from react import PetsApiFactory from petstore axios api import useKe
  • 每次调用方法时创建对象的新实例

    Messenger Default Register
  • ASP.net - 按钮 - Javascript 确认对话框 - 执行一些服务器端代码?

    我有一个简单的 ASP net 页面 用户可以在其中编辑有关自己的信息 单击 编辑 按钮时 表单进入编辑模式 并显示 保存 和 取消 按钮 其行为符合预期 我想做的是这样的 单击 保存 后 将显示一个 Javascript 确认对话框 询问
  • 对“DTLS_client_method”的未定义引用

    我目前正在尝试在 android 上实现 DTLS 以加密 UDP 数据报 为此 我构建了 openssl android 项目可以在这里找到 由此我得到了两个共享库 libssl so 和 libcrypto so 我将它们重命名为 li
  • Boost是如何实现这样的语法的呢?

    http www boost org doc libs 1 58 0 doc html program options tutorial html Declare the supported options desc add options
  • 从字符串中提取图像 src

    我试图将所有图像元素匹配为字符串 这是我的正则表达式 html match
  • 将闪亮与facet_grid结合起来

    我正在开展一个学校项目 其中有一些 dyplr 查询 我需要使用 Shiny 库使它们交互 现在我在 dyplr 中有一个查询 在那里我可以看到印度外卖餐厅每个国家的收入 我有以下查询 df gt group by Origin Jaar
  • Node 提供的 ejs 文件可以使用离线引导吗?

    我是节点和全栈开发的新手 希望我正确地提出这个问题 而不是粗心或冒犯您的特定理解水平 我的开发环境已连接互联网 但生产环境不会连接 我想将 bootstrap css 与节点一起使用 Apache httpd 不是生产环境中的一个选项 本地
  • 使用 MySQL Connector for .net 打开 MySQL 连接非常慢

    我正在尝试解决使用 MySQL Connector for net 打开连接时 MySQL 响应时间过长的问题 我已经使用 skip name resolve 安装了在 Azure VM Server 2008 上运行的 MySQL 5 5
  • 查找每个部门的最高薪水 - 是否有更有效的查询?

    我有一个有效的查询 但我怀疑我这样做效率低下 是否有更优雅的方法来查找每个部门的最高薪水以及赚取该薪水的员工 我正在做一个 cte 来查找每个部门 ID 的最高工资 然后通过匹配工资和部门 ID 将其与员工数据结合起来 我有下面的代码来构建