sql xml类型作为查询条件_【PL/SQL 练习题】-多条件限定查询 三种方法

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

  SELECT * FROM EMP ORDER BY DEPTNO DESC;

7d0430cc55dde2733a54e8894d4973f7.png

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

3bbd411adfb88107120778d32ae09c83.png


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

3e13de10cd25034c964414d340256174.png

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;

96e54bb26e47b5750dbd3ec4289abebf.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值