0

我想知道是否有人可以帮助解决这个更复杂的选择查询。我在下面包含了数据的子集和 select 语句的逻辑。我在开始这个时遇到了真正的麻烦:

department  position    grade   salary  
sales       manager     A       40,000
sales       manager     A       35,000
hr          manager     A       27,000
hr          assistant   B       17,000
hr          assistant   B       17,000
IT          manager     A       45,000
IT          manager     C       40,000
IT          assistant   B       27,000

对于每个独特的 POSITION + GRADE(即经理 + A、经理 + B、经理 + C、助理 + A、助理 + B、助理 + C),我希望每个部门最多返回 1 个条目

如果一个部门有超过 1 个相同 POSITION + GRADE 的条目,则返回工资最低的条目。

我可以确定的唯一条目将是静态的,即 GRADE 将始终为 A、B 或 C。任何其他字段都可能更改。

查询应返回:

department  position    grade   salary  
sales       manager     A       35,000
hr          manager     A       27,000
hr          assistant   B       17,000
IT          manager     A       45,000
IT          manager     C       40,000
IT          assistant   B       27,000

我可以根据部门+职位+等级构建某种 DISTINCT 查询并返回最低工资吗?

4

1 回答 1

1

一个简单的LEFT JOIN可以检查具有相同部门/职位/等级的人,并找到薪水最低的人。增加了,DISTINCT避免同工资重复;

SELECT DISTINCT t1.*
FROM Table1 t1
LEFT JOIN Table1 t2
  ON t1.position = t2.position
 AND t1.grade = t2.grade
 AND t1.department = t2.department
 AND t1.salary > t2.salary
WHERE t2.salary IS NULL;

一个用于测试的 SQLfiddle

于 2013-08-29T20:33:34.323 回答