柚子快報激活碼778899分享:sql — 窗口函數(shù)
柚子快報激活碼778899分享:sql — 窗口函數(shù)
1. 基本介紹
1.1 窗口函數(shù)介紹
窗口函數(shù)是SQL中的一種強(qiáng)大工具,用于在查詢結(jié)果中進(jìn)行分析和計算。
與常規(guī)聚合函數(shù)不同,窗口函數(shù)可以在不影響查詢結(jié)果集的情況下,對結(jié)果集中的每一行應(yīng)用函數(shù),生成額外的信息,例如排名、累計和等。這些函數(shù)可以根據(jù)定義的窗口范圍動態(tài)地計算值,而不是像常規(guī)聚合函數(shù)那樣對整個數(shù)據(jù)集進(jìn)行計算。
窗口函數(shù)通常與OVER子句一起使用,OVER子句定義了窗口的范圍,可以指定分區(qū)、排序規(guī)則等。
1.2 窗口函數(shù)分類
窗口函數(shù)可以分為排序窗口函數(shù)和統(tǒng)計窗口函數(shù)兩大類。
排序窗口函數(shù)主要用于對數(shù)據(jù)進(jìn)行排序和排名,包括row_number、rank、dense_rank、percent_rank、ntile;
統(tǒng)計窗口函數(shù)則用于進(jìn)行統(tǒng)計計算,包括count、sum、avg、min、max、first_value、last_value、lag、lead、cume_dist。
2. 樣例數(shù)據(jù)
2.1 樣例數(shù)據(jù)SQL
CREATE TABLE Sales ( id INT, region VARCHAR(50), amount DECIMAL(10, 2));
INSERT INTO Sales (id, region, amount) VALUES(1, 'North', 1000.50),(2, 'North', 1500.75),(3, 'South', 800.25),(4, 'West', 1200.00),(5, 'East', 2000.30);
3.各個窗口函數(shù)介紹
3.1 row_number()窗口函數(shù)
row_number函數(shù)為結(jié)果集中的每一行分配一個唯一的整數(shù),按照指定的排序順序進(jìn)行排列。
SELECT id, region, amount, ROW_NUMBER() OVER (ORDER BY amount DESC) AS row_numFROM Sales;
3.2 rank ()窗口函數(shù)
rank函數(shù)為結(jié)果集中的每一行分配一個排名,如果有相同數(shù)值,則會跳過相同排名并繼續(xù)遞增。(不連續(xù)排名)
rank()函數(shù)的結(jié)果是:1, 2, 3, 3, 5, 6。
SELECT id, region, amount, RANK() OVER (ORDER BY amount DESC) AS rankFROM Sales;
分區(qū)
RANK() OVER (PARTITION BY column ORDER BY column) AS rank_column
PARTITION BY 子句用于指定分區(qū)列,根據(jù)該列的值將數(shù)據(jù)分成不同的分區(qū)。ORDER BY 子句用于指定排序列,根據(jù)該列的值對每個分區(qū)內(nèi)的行進(jìn)行排序。
3.3 dense_rank()窗口函數(shù)
dense_rank函數(shù)為結(jié)果集中的每一行分配一個排名,與rank函數(shù)類似,但是在遇到相同數(shù)值時,dense_rank不會跳過相同排名,而是連續(xù)分配相同的排名。(連續(xù)排名)
dense_rank()函數(shù)的結(jié)果是:1, 2, 3, 3, 4, 5
SELECT id, region, amount, DENSE_RANK() OVER (ORDER BY amount DESC) AS dense_rankFROM Sales;
3.4 percent_rank()窗口函數(shù)
percent_rank函數(shù)計算每一行在排序結(jié)果中的相對排名,返回一個介于0和1之間的小數(shù)值,用來表示行在排序結(jié)果中的相對位置。
SELECT id, region, amount, PERCENT_RANK() OVER (ORDER BY amount DESC) AS percent_rankFROM Sales;
3.5 ntile(n)窗口函數(shù)
ntile函數(shù)將結(jié)果集分割成指定數(shù)量的桶,并為每個桶分配一個編號,確保每個桶中的行數(shù)量盡可能均勻。
SELECT id, region, amount, NTILE(2) OVER (ORDER BY amount DESC) AS ntileFROM Sales;
3.6 count(*)窗口函數(shù)
?count函數(shù)計算結(jié)果集中行的數(shù)量,可以結(jié)合分組函數(shù)使用,用于統(tǒng)計分組內(nèi)的行數(shù)。
SELECT id, region, amount, COUNT(*) OVER (PARTITION BY region) AS region_countFROM Sales;
3.7 sum( ) 窗口函數(shù)
sum函數(shù)計算指定列的總和,并將結(jié)果添加到每一行。
SELECT id, region, amount, SUM(amount) OVER () AS total_salesFROM Sales;
3.8 min() 窗口函數(shù)
min函數(shù)計算指定列的最小值,并將結(jié)果添加到每一行。
SELECT id, region, amount, MIN(amount) OVER () AS min_amountFROM Sales;
3.9 max() 窗口函數(shù)
max函數(shù)計算指定列的最大值,并將結(jié)果添加到每一行。
SELECT id, region, amount, MAX(amount) OVER () AS max_amountFROM Sales;
3.10 avg () 窗口函數(shù)
avg函數(shù)計算指定列的平均值,并將結(jié)果添加到每一行。
SELECT id, region, amount, AVG(amount) OVER () AS avg_amountFROM Sales;
3.11 first_value () 窗口函數(shù)
first_value() 函數(shù)返回分組內(nèi)的第一個值,并將其添加到每一行。
SELECT id, region, amount, FIRST_VALUE(amount) OVER (PARTITION BY region ORDER BY id) AS first_amountFROM Sales;
柚子快報激活碼778899分享:sql — 窗口函數(shù)
好文閱讀
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。