PLSQL-练习题5多条件限定-And字段1字段2

47次阅读

共计 644 个字符,预计需要花费 2 分钟才能阅读完成。

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

  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;

正文完
 0