SQL 聚合函数一定要跟group by以及NULL的关系的案例精讲
生活随笔
收集整理的這篇文章主要介紹了
SQL 聚合函数一定要跟group by以及NULL的关系的案例精讲
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
SQL 聚合函數與GROUP BY NULL的關系及ALL的使用說明
需求說明
有如下一道SQL題,網友咨詢:
1 為啥正確答案是第二項?
2 聚合函數是否一定要跟GROUP BY PARTITION BY?
?問題解答
1 聚合函數(SUM、COUNT、MAX、MIN)等不一定要跟GROUP BY、PARTITION BY,當這種情況出現時即對某一列進行聚合,即當前只有一個分組。
2 NULL值在聚合函數里會不參與運算,會被過濾掉。(當且僅當結果集不全是NULL時)。
3 題目的詳細分析見下:
/* # 0 關于問題 找出GDP比亞洲里任意一個國家都多的所有國家。 注:亞洲的一些國家的GDP可能是NULL值。#1 關于答案的分析: 條件1:Africa(some countries may hava NULL gdp vlulues),亞洲的一些國家的gdp數據可能是NULL值。# ans1:這里無關子查詢SELECT MAX(gdp) FROM bbc WHERE region='Afirca' AND gdp=0 實際已經限定出來的結果為0或者NULL。# ans2:正確選項。# ans3:顯然用錯了聚合函數,應該是MAX。# ans4:在條件1的情況下結果可能是NULL。簡言之任何比較符(>、<、=)跟NULL比較都是NULL。# ans5:在#ans4的基礎上做了改進,但針對NULL的判斷用錯了方法,應該用NOT NULL或者not 字段 <=> NULL。#2 關于總結 這道題考察的是聚合函數、NULL、ALL關鍵字的使用。 1 聚合函數處理時會過濾NULL值(嚴謹的說是處理的結果集不全是NULL時)。 2 ALL關鍵字在做比較時碰到NULL值返回NULL。 3 NULL的比較符號是IS、IS NOT或者 <=> NULL、NOT 字段 <=> NULL */ -- # 3 延展案例: -- 3.1 聚合函數處理時會過濾NULL值(當結果集為NULL時最終還是NULL)。 SELECT MAX(A.sal) MAXA,MAX(B.sal) MAXB FROM ( SELECT sal FROM emp WHERE deptno=20 UNION SELECT NULL )A,(SELECT sal FROM emp WHERE deptno=20 AND sal=0 UNION SELECT NULL)B /* MAXA MAXB 3000.00 */-- 3.2 ALL關鍵字在做比較時碰到NULL值返回NULL。 SELECT empno,sal FROM emp WHERE sal > ALL (SELECT sal FROM emp WHERE deptno=20 UNION SELECT NULL )/* empno sal*/ -- 3.3 用 NOT <=> 或者 IS NOT NULL過濾NULL值 SELECT empno,sal FROM emp WHERE sal > ALL (SELECT * FROM (SELECT sal FROM emp WHERE deptno=20 UNION SELECT NULL)AWHERE not sal <=> NULL-- WHERE sal IS NOT NULL 等價于上式 )/* empno sal 7839 5000.00 */-- 3.4 MAX、MIN、SUM等聚合函數可以不跟GROUP BY,意思為對某一列求聚合。 -- 它實際等價于下面的寫法,即將整個一列作為一個GROUP。 SELECT MAX(sal) FROM emp GROUP BY (SELECT 1) /* MAX(sal) 5000.00 */-- #4 用的表結構及數據,詳見:SQL 100+個最佳入門案例實踐(覆蓋Oralce、SQL Server、Mysql)之基礎操作_1_檢索數據_數據科學匯集-CSDN博客7.1 數據集見如下SQL,以Oracle為例:-- DROP TABLE EMP;-- DROP TABLE DEPT;-- DROP TABLE BONUS;-- DROP TABLE SALGRADE;CREATE TABLE DEPT(DEPTNO NUMBER(2) NOT NULL CONSTRAINT pk_dept_deptno primary key,DNAME Vhttps://shenliang.blog.csdn.net/article/details/70145965
總結
以上是生活随笔為你收集整理的SQL 聚合函数一定要跟group by以及NULL的关系的案例精讲的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电脑提示无法识别的usb设备怎么办 解决
- 下一篇: Mysql 优化器内部JOIN算法has