ToB企服应用市场:ToB评测及商务社交产业平台
标题:
sql — 窗口函数
[打印本页]
作者:
天空闲话
时间:
2024-7-15 08:54
标题:
sql — 窗口函数
1. 基本先容
1.1 窗口函数先容
窗口函数是SQL中的一种强大工具,用于在查询结果中进行分析和盘算。
与常规聚合函数不同,窗口函数可以在不影响查询结果集的情况下,对结果集中的每一行应用函数,天生额外的信息,比方排名、累计和等。这些函数可以
根据定义的窗口范围动态土地算值,而不是像常规聚合函数那样对整个数据集进行盘算。
窗口函数通常与OVER子句一起使用,OVER子句定义了窗口的范围,可以指定分区、排序规则等。
1.2 窗口函数分类
窗口函数可以分为
排序窗口函数
和
统计窗口函数
两大类。
排序窗口函数主要用于对数据进行排序和排名,包括row_number、rank、dense_rank、percent_rank、ntile;
统计窗口函数则用于进行统计盘算,包括count、sum、avg、min、max、first_value、last_value、lag、lead、cume_dist。
2. 样例数据
2.1 样例数据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.各个窗口函数先容
3.1 row_number
()
窗口函数
row_number函数为结果集中的
每一行分配一个唯一的整数
,按照指定的排序顺序进行分列。
SELECT id, region, amount,<strong> ROW_NUMBER() OVER (ORDER BY amount DESC)</strong> AS row_numFROM Sales;
复制代码
3.2 rank
()
窗口函数
rank函数为结果集中的
每一行分配一个排名,如果有雷同数值,则会跳过雷同排名并继续递增
。
(不连续排名)
rank()函数的结果是:1, 2,
3, 3, 5,
6。
SELECT id, region, amount, <strong>RANK() OVER (ORDER BY amount DESC) </strong>AS rankFROM Sales;
复制代码
分区
RANK() OVER (PARTITION BY column ORDER BY column) AS rank_column
PARTITION BY 子句用于指定分区列,根据该列的值将数据分成不同的分区。
ORDER BY 子句用于指定排序列,根据该列的值对每个分区内的行进行排序。
3.3 dense_rank
()
窗口函数
dense_rank函数为结果集中的
每一行分配一个排名,
与rank函数类似,但是在遇到雷同数值时,
dense_rank不会跳过雷同排名,而是连续分配雷同的排名
。
(连续排名)
dense_rank()函数的结果是:1, 2,
3, 3, 4,
5
SELECT id, region, amount, <strong>DENSE_RANK() OVER (ORDER BY amount DESC)</strong> AS dense_rankFROM Sales;
复制代码
3.4 percent_rank()
窗口函数
percent_rank函数
盘算每一行在排序结果中的相对排名,返回一个介于0和1之间的小数值,用来表示行在排序结果中的相对位置。
SELECT id, region, amount, <strong>PERCENT_RANK() OVER (ORDER BY amount DESC) </strong>AS percent_rankFROM Sales;
复制代码
3.5 ntile(n)窗口函数
ntile函数
将结果集分割成指定命量的桶,并为每个桶分配一个编号,确保每个桶中的行数量尽可能均匀。
SELECT id, region, amount, <strong>NTILE(2) OVER (ORDER BY amount DESC) </strong>AS ntileFROM Sales;
复制代码
3.6 count
(*)
窗口函数
count函数盘算结果集中行的数量,可以联合分组函数使用,用于统计分组内的行数。
SELECT id, region, amount,<strong> COUNT(*) OVER (PARTITION BY region)</strong> AS region_countFROM Sales;
复制代码
3.7 sum( ) 窗口函数
sum函数盘算指定列的总和,并将结果添加到每一行。
SELECT id, region, amount, <strong>SUM(amount) OVER () AS </strong>total_salesFROM Sales;
复制代码
3.8 min() 窗口函数
min函数盘算指定列的最小值,并将结果添加到每一行。
SELECT id, region, amount, MIN(amount) OVER () AS min_amountFROM Sales;
复制代码
3.9 max() 窗口函数
max函数盘算指定列的最大值,并将结果添加到每一行。
SELECT id, region, amount, <strong>MAX(amount) OVER () </strong>AS max_amountFROM Sales;
复制代码
3.10 avg () 窗口函数
avg函数盘算指定列的平均值,并将结果添加到每一行。
SELECT id, region, amount, <strong>AVG(amount) OVER () </strong>AS avg_amountFROM Sales;
复制代码
3.11 first_value () 窗口函数
first_value() 函数返回分组内的第一个值,并将其添加到每一行。
SELECT id, region, amount, FIRST_VALUE(amount) OVER (PARTITION BY region ORDER BY id) AS first_amountFROM Sales;
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4