这里直接可以用子查询和关联做。
原表与结果:
SELECT * FROM EMP ORDER BY DEPTNO DESC;
如果先用 Deptno 分组再求最小值。
这里的关键是两个合并条件进行筛选,因为 这个是分组后再求每个分组的最小值,唯一值
如果只匹配 SAL,那有个部门的最小值恰好是其他部门的最小值,则会返回多个员工的信息。
方法一:
这可以理解,相当于 And(Deptno,Sal)做一个合逻辑运算。
SELECT * FROM EMP
WHERE(DEPTNO,SAL) IN (SELECT DEPTNO,MIN(SAL) FROM EMP GROUP BY DEPTNO);
字段对应着字段的 Where 后面的字段和后面的 Select 子查询字段要一样。
Where(Deptno,Sal)=Select Deptno,Min(sal) From
方法二:表左连接
把挑选出来的每个部门的最低工资求出来,然后作为临时表 A
SELECT * FROM EMP E
JOIN(SELECT DEPTNO,MIN(SAL) AS MIN_SAL FROM EMP GROUP BY DEPTNO
) A
ON E.DEPTNO = A.DEPTNO
AND E.SAL = A.MIN_SAL;
2020 年 5 月 30 日更新:
方法三: 分析函数,用 Row_number 按照部门然后薪酬升序排序,然后套用子查询取值为 1
SELECT * FROM
(
SELECT E.*
,ROW_NUMBER()OVER(PARTITION BY DEPTNO ORDER BY SAL ASC) AS RN
FROM EMP E
)T WHERE T.RN =1;