ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

CASE WHEN 和 DECODE() ,NVL() 的区别?WHERE 和 HAVING 的区别

2021-05-10 07:02:33  阅读:221  来源: 互联网

标签:CASE GROUP 区别 WHEN EMP DEPTNO WHERE HAVING SELECT


CASE WHEN 和 DECODE() ,NVL() 的区别?
1、CASE WHEN 是SQL通用的条件判断写法 可以做条件判断 也可以做等值判断 。
2、DECODE() 函数是oracle特有的,主要做等值判断,结合其他函数使用也可以做简单的条件判断。
3、NVL() 是对空值进行判断并赋一个默认值 。
4、CASE WHEN 和 DECODE() 进行判断以后会产生一个新的列 ,而 NVL()函数不会产生新的列 。

SIGN(对参数计算结果进行判断)
结果 > 0 返回 1
结果 = 0 返回 0
结果 < 0 返回-1

WHERE 和 HAVING 的区别:
1、过滤条件的位置不同 WHERE 必须 放在 GROUP BY 前面 ,HAVING 必须 放在 GROUP BY 后面 。
2、执行顺序不同 。
3、WHERE 后面可以跟所有的过滤条件,除了 不能直接 跟聚合函数 。
4、HAVING 后面只能 跟 聚合函数 或者 分组的字段 。聚合函数可以在 HAVING 后面 直接当条件使用 。

去重的方法:
1、DISTINCT 对结果集去重
SELECT DISTINCT E.DEPTNO
FROM EMP E
2、GROUP BY 对分组字段去重
SELECT E.DEPTNO
FROM EMP E
GROUP BY E.DEPTNO
HAVING COUNT(*) >= 2

3、ROWID 通过物理地址去重,仅限 ORACLE 数据库 ,MAX(ROWID) 最新记录 ,MIN(ROWID) 原始记录 。
SELECT E.DEPTNO ,ROWID
FROM EMP E
WHERE ROWID IN (SELECT MIN(ROWID) FROM EMP GROUP BY DEPTNO)

4、UNION 集合运算去重
SELECT DEPTNO FROM EMP WHERE DEPTNO IN (10,30)
UNION
SELECT DEPTNO FROM DEPT ;

5、ROW_NUNBER() 分析函数去重
SELECT E.*
FROM (
SELECT DEPTNO , ROW_NUMBER()OVER(PARTITION BY DEPTNO ORDER BY DEPTNO) RN
FROM EMP
) E
WHERE E.RN = 1 ;

分析函数中三种排名方式 :
SAL ROW_NUMBER() DENSE_RANK() RANK()
5000 1 1 1
3000 2 2 2
3000 3 2 2
2000 4 3 4
1500 5 4 5
1500 6 4 5
1500 7 4 5
1000 8 5 8

END

标签:CASE,GROUP,区别,WHEN,EMP,DEPTNO,WHERE,HAVING,SELECT
来源: https://blog.51cto.com/u_15127632/2764501

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有