这里直接可以用子查询和关联做。
原表与结果:
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;
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。