SQL Cookbook系列 視窗函式補充

2021-08-21 19:55:56 字數 757 閱讀 6513

1.分組

分組是把類似的行組織在一起的一種方式。在結果集中每一行都是乙個組。

組是非空的,每乙個可以在結果集中顯示的組都至少包含乙個記錄。每個組都與結果集中的其他組不同。對組內進行統計的count操作絕對不為0. 針對null值進行分組的時候,必須要做額外的處理來規避。在分組操作中,要對分組的標量中存在null值的情況做處理,最好分組的列都是非null值。對於select列表中的項,如果沒有把它當做聚集函式的引數使用,那麼它必須是組的一部分。例如:

select deptno ,count(*) from dept group by deptno;

2.視窗

視窗操作是聚集函式與over的聯合使用。例如:

select deptno,count(*)over() from emp order by deptno;

當然視窗允許處理一行的多層聚集。在實際執行過程中,視窗函式都是最後一步執行,而且僅僅位於order by之前。

3.分割槽

使用partition by子句預定義行的分割槽或組,以完成聚集。它建立的組在結果集中並不是獨特的,與order by的獨特性有區別。使用分割槽操作,每乙個記錄都包含了所在分組的聚集操作值,而不是像order by一樣,只能是彙總的結果集。

4.null的作用

聚集函式會忽略null值,確切的說聚集函式只計算非null值。

5.可讀性+效能=威力

這裡的sql要做平衡,聯接查詢和聚集操作,這是乙個額外的選擇。一般來說,每乙個查詢問題都有多種解決思路,如何選取需要仔細權衡。

SQLCookbook 學習筆記

許多人以一種馬馬虎虎的態度在使用sql,根本沒有意識到自己掌握著多麼強大的 本書的目的是開啟讀者的視野,看看sql究竟能幹什麼。一鱗半爪 從資料庫中檢索資料看似是一件容易的事情,然而,在it世界裡,盡可能高效地檢索資料至關重要。讀完本書,你不應該覺得要將現在所有 重寫,而是要認識到,現在sql已經有...

sqlCookbook學習總結(一)

1 從表中檢索所有的行或列 使用 字元 代表所有資料 例如select from emp查詢表emp中所有資料 使用where 可以返回指定行 如select from emp where id 使用具體字段返回個別列 如 select empno,name,age,salary,job from ...

sql cookbook實驗記錄(First)

如下是sql cookbook的一些實驗記錄。返璞歸真,其實都是一些很簡單的東西,簡單的東西才有生命力,也不可能每天都有一些重大課題讓我們研究。廢話不說,言歸正傳。環境介紹 oracle database 19c enterprise edition release 19.0.0.0.0 produ...