php网站开发心得3500字,北京做网站网络公司,做家教去哪个网站,深圳的互联网公司排名一、窗口函数
1、什么是窗口函数 在 SQL 中#xff0c;窗口函数#xff08;Window Functions#xff09;是一种特殊的函数#xff0c;它允许在查询结果集的特定窗口#xff08;通常是一组行#xff09;上执行聚合、分析和计算操作#xff0c;而无需聚合整个结果集。窗口…一、窗口函数
1、什么是窗口函数 在 SQL 中窗口函数Window Functions是一种特殊的函数它允许在查询结果集的特定窗口通常是一组行上执行聚合、分析和计算操作而无需聚合整个结果集。窗口函数可以用来解决许多复杂的数据分析问题例如计算排名、累积总数、移动平均值等。窗口函数通常与 OVER 子句一起使用该子句用于定义窗口的大小和位置。
窗口函数的一般语法结构如下
窗口函数([参数]) OVER ([PARTITION BY 列1, 列2, ...][ORDER BY 列3 [ASC|DESC]][ROWS | RANGE 关键字][窗口范围或行数定义]
)
窗口函数 是要执行的窗口函数例如 SUM、AVG、ROW_NUMBER 等。PARTITION BY 子句可选用于对结果集进行分区将数据划分为不同的分组。ORDER BY 子句可选用于对每个分区内的行进行排序。ROWS 或 RANGE 关键字指定窗口的类型ROWS 表示窗口以行数为单位RANGE 表示窗口以值范围为单位。窗口范围或行数定义用于指定窗口的大小和位置例如 ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING 表示窗口包括当前行及其前面的三行和后面的一行。
2、常用的窗口函数 ROW_NUMBER()为结果集中的每一行分配一个唯一的数字序号。 语法格式 ROW_NUMBER() OVER (ORDER BY 列1 [ASC|DESC]) RANK()为结果集中的每一行分配一个排名如果有相同的值则会跳过相同的排名。 语法格式 RANK() OVER (ORDER BY 列1 [ASC|DESC]) DENSE_RANK()为结果集中的每一行分配一个密集排名如果有相同的值则仍然连续分配排名。 语法格式 DENSE_RANK() OVER (ORDER BY 列1 [ASC|DESC]) SUM()计算指定列的总和可以在窗口内计算。 语法格式 SUM(列1) OVER (PARTITION BY 列2 ORDER BY 列3 [ASC|DESC]) AVG()计算指定列的平均值可以在窗口内计算。 语法格式 AVG(列1) OVER (PARTITION BY 列2 ORDER BY 列3 [ASC|DESC]) LEAD()获取结果集中当前行后面的指定行数的值。 语法格式 LEAD(列1, offset, default_value) OVER (ORDER BY 列2 [ASC|DESC]) LAG()获取结果集中当前行前面的指定行数的值。 语法格式 LAG(列1, offset, default_value) OVER (ORDER BY 列2 [ASC|DESC]) FIRST_VALUE()获取结果集中指定列的第一个值。 语法格式 FIRST_VALUE(列1) OVER (ORDER BY 列2 [ASC|DESC]) LAST_VALUE()获取结果集中指定列的最后一个值。 语法格式 LAST_VALUE(列1) OVER (ORDER BY 列2 [ASC|DESC] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) COUNT()计算指定列的行数可以在窗口内计算。 语法格式 COUNT(列1) OVER (PARTITION BY 列2 ORDER BY 列3 [ASC|DESC]) MAX()获取指定列的最大值可以在窗口内计算。 语法格式 MAX(列1) OVER (PARTITION BY 列2 ORDER BY 列3 [ASC|DESC]) MIN()获取指定列的最小值可以在窗口内计算。 语法格式 Min(列1) OVER (PARTITION BY 列2 ORDER BY 列3 [ASC|DESC]) NTILE()将结果集分成指定数量的桶并为每个桶分配一个编号。 语法格式 NTILE(number_of_buckets) OVER (ORDER BY 列1 [ASC|DESC]) PERCENT_RANK()计算结果集中每行的百分比排名。 语法格式 PERCENT_RANK() OVER (ORDER BY 列1 [ASC|DESC]) CUME_DIST()计算结果集中每行的累积分布值。 语法格式 CUME_DIST() OVER (ORDER BY 列1 [ASC|DESC]) ROW_NUMBER()为结果集中的每一行分配一个唯一的数字序号。 语法格式
ROW_NUMBER() OVER (ORDER BY 列1 [ASC|DESC])
二、CTE语法
CTE语法类似子查询可以将一个select语句计算的结果当成一个新的临时表使用。
-- 子查询将子查询的结果当做表使用
select empno,ename from (
select * from emp) t1;
-- 基本用法
with 临时表名 as(查询语句)
select * from 临时表名-- 多个计算结果保存
with tb1 as(查询语句),,tb2 as(查询语句 select * from tb1),tb3 as(查询语句).....
select * from tb3 join tb2
with tb1 as(select * from emp)
select ename,sal from tb1;