SQL查询获取最低工资

问题描述 投票:0回答:2

我接到一个任务,要从我们的 SQL Server 数据库中获取每个部门和工作的所有员工的最低工资(忽略所赚取的佣金)。

这是一个例子:

总统 66928678326564667858690626367964989652716656468454687366900069324
emp_id 员工姓名 工作名称 经理_id 雇用日期 工资 佣金 dep_id
68319 凯灵 1991-11-18 6000.00 1001
火焰 经理 68319 1991-05-01 2750.00 3001
克莱尔 经理 68319 1991-06-09 2550.00 1001
乔纳斯 经理 68319 1991-04-02 2957.00 2001
猩红色 分析师 65646 1997-04-19 3100.00 2001
弗兰克 分析师 65646 1991-12-03 3100.00 2001
桑德琳 职员 69062 1990-12-18 900.00 2001
阿德琳 推销员 66928 1991-02-20 1700.00 400.00 3001
韦德 推销员 66928 1991-02-22 1350.00 600.00 3001
疯狂 推销员 66928 1991-09-28 1350.00 1500.00 3001
塔克 推销员 66928 1991-09-08 1600.00 0.00 3001
ADNRES 职员 67858 1997-05-23 1200.00 2001
朱利叶斯 职员 66928 1991-12-03 1050.00 3001
标记 职员 67832 1992-01-23 1400.00 1001
预期产量

emp_id68319 总统 火焰克莱尔乔纳斯韦德猩红色桑德琳朱利叶斯标记我在下面尝试了这个查询,但问题是它只返回工作、部门和薪水列。
员工姓名 工作名称 经理_id 雇用日期 工资 佣金 dep_id
凯灵 1991-11-18 6000.00 1001 66928
经理 68319 1991-05-01 2750.00 3001 67832
经理 68319 1991-06-09 2550.00 1001 65646
经理 68319 1991-04-02 2957.00 2001 65271
推销员 66928 1991-02-22 1350.00 600.00 3001 67858
分析师 65646 1997-04-19 3100.00 2001 63679
职员 69062 1990-12-18 900.00 2001 69000
职员 66928 1991-12-03 1050.00 3001 69324
职员 67832 1992-01-23 1400.00 1001
SELECT job_name, MIN(salary), dep_id FROM employees GROUP BY dep_id, job_name;

job_name | salary | dep_id -----------+---------+-------- PRESIDENT | 6000.00 | 1001 MANAGER | 2750.00 | 3001 MANAGER | 2550.00 | 1001 MANAGER | 2957.00 | 2001 SALESMAN | 1350.00 | 3001 ANALYST | 3100.00 | 2001 CLERK | 900.00 | 2001 CLERK | 1050.00 | 3001 CLERK | 1400.00 | 1001 (9 rows)

谁能帮我如何获取员工姓名?

我不确定我是否理解逻辑和矛盾(最低与第二高),但为了获得您想要的预期结果:

sql sql-server subquery
2个回答
0
投票
对于每个部门/工作组合,第二高薪水

如果一个部门/工作组合只有一名员工,则获得唯一的薪水
  • 如果有平局,第二高的是后来雇用的员工
  • 如果这些猜测有任何不正确,请更详细地更新问题。
  • SELECT emp_name, job_name, salary, dep_id FROM ( SELECT *, c = COUNT(*) OVER (PARTITION BY dep_id, job_name), rn = ROW_NUMBER() OVER (PARTITION BY dep_id, job_name ORDER BY salary DESC, hire_date) FROM dbo.employees ) AS RankedByDept WHERE rn = 2 OR c = 1;

示例

SELECT e.emp_name, job_name, MIN(salary), dep_id FROM employees AS e GROUP BY dep_id, job_name;

-1
投票

您也可以尝试此查询来获取员工姓名。

    

© www.soinside.com 2019 - 2024. All rights reserved.