You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL Server中按部门和职位查询最低薪资的完整员工信息?

解决SQL Server按部门+职位分组取薪资最低员工完整信息的方法

以下几种方法可以帮你获取每组(部门+职位)内薪资最低员工的完整信息:

方法1:使用窗口函数ROW_NUMBER()

这是最简洁直观的方式,利用窗口函数按部门和职位分区,再按薪资升序排序,取每组排名第一的记录:

SELECT emp_id, emp_name, dep_id, job_name, salary
FROM (
    SELECT 
        emp_id, emp_name, dep_id, job_name, salary,
        ROW_NUMBER() OVER(PARTITION BY dep_id, job_name ORDER BY salary ASC) AS rn
    FROM employees
) AS ranked_emps
WHERE rn = 1;

注:如果同一组内有多个员工薪资相同且都是最低,ROW_NUMBER()会随机选一个;若要返回所有同薪资的最低员工,把ROW_NUMBER()换成RANK()或DENSE_RANK()即可

方法2:子查询关联原表

先通过GROUP BY找到每个部门+职位组的最低薪资,再关联原表匹配出对应的员工完整信息:

SELECT e.emp_id, e.emp_name, e.dep_id, e.job_name, e.salary
FROM employees e
JOIN (
    SELECT dep_id, job_name, MIN(salary) AS min_sal
    FROM employees
    GROUP BY dep_id, job_name
) AS group_mins ON e.dep_id = group_mins.dep_id 
                AND e.job_name = group_mins.job_name 
                AND e.salary = group_mins.min_sal;

这个方法会返回所有同组内薪资等于最低值的员工,适合需要保留全部最低薪资员工的场景。

方法3:使用APPLY运算符

APPLY可以让你为每组数据执行一次子查询,直接获取对应最低薪资的员工记录:

SELECT e.emp_id, e.emp_name, e.dep_id, e.job_name, e.salary
FROM (
    SELECT DISTINCT dep_id, job_name
    FROM employees
) AS groups
CROSS APPLY (
    SELECT TOP 1 emp_id, emp_name, salary
    FROM employees
    WHERE dep_id = groups.dep_id AND job_name = groups.job_name
    ORDER BY salary ASC
) AS e;

注:如果要返回同组内所有薪资最低的员工,把TOP 1换成TOP 1 WITH TIES即可

内容的提问来源于stack exchange,提问作者avaerl liem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 14:32:10