【PL/SQL 练习题5】多条件限定 And(字段1,字段2)

这里直接可以用子查询和关联做。
原表与结果:

  SELECT * FROM EMP ORDER BY DEPTNO DESC;

【PL/SQL 练习题5】多条件限定 And(字段1,字段2)_第1张图片

如果先用Deptno分组再求最小值。

【PL/SQL 练习题5】多条件限定 And(字段1,字段2)_第2张图片

这里的关键是两个合并条件进行筛选,因为这个是分组后再求每个分组的最小值,唯一值
如果只匹配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;

【PL/SQL 练习题5】多条件限定 And(字段1,字段2)_第3张图片


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;

你可能感兴趣的:(oracle,plsql)