开窗函数!

开窗函数(Window Function)是SQL中的一种高级功能,允许你在一组相关行(一个“窗口”)上执行聚合操作,而不像传统聚合函数(如SUM(), AVG(), COUNT())那样将所有匹配行合并成单个汇总行。开窗函数在处理复杂的数据分析和报告任务时特别有用,因为它能保持原始数据行的同时进行复杂的计算。以下是开窗函数的关键特性:


基本概念: 开窗函数在查询结果集上定义一个“窗口”或“视图”,这个窗口可以包含当前行、前面的行、后面的行,甚至整个结果集的一部分。函数计算时会考虑这个窗口内的数据,但结果仍然按行返回。


主要类别:
聚合函数:如SUM(), AVG(), COUNT(), MIN(), MAX(),但它们在每个窗口内计算,而不是整个结果集。
排位函数:包括RANK(), DENSE_RANK(), ROW_NUMBER(),用于确定行在窗口中的位置。
分析函数:如LEAD(), LAG(), FIRST_VALUE(), LAST_VALUE(),用于访问同一窗口内的其他行数据。


语法结构:

function_name() OVER (
       [PARTITION BY column1, column2, ...]
       [ORDER BY column3, column4, ... [ASC|DESC]]
       [ROWS BETWEEN start AND end]
   )


PARTITION BY:将结果集分割成多个分区,每个分区单独处理。
ORDER BY:在每个分区或整个窗口内定义行的顺序。
ROWS BETWEEN:进一步定义窗口的范围,比如前几行、后几行或特定范围内的行。

mysql 如果你用的版本不支持开窗函数,可以自己实现

实例:

CREATE TABLE `ranktest` (
  `id` int(11) NOT NULL,
  `name` varchar(255) DEFAULT NULL,
  `type2` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

SELECT
	( @i := CASE WHEN @type2 = type2 THEN @i + 1 ELSE 1 END ) AS rownum,
	p.*,(
		@type2 := type2 
	) 
FROM
	ranktest p,(
	SELECT
		@i := 0 
	) AS a 
ORDER BY
	type2,
	id DESC

 

完成了 type2 相同的作为一个 窗口进行 独立排序 。

sql 解释:
(select @i := 0 ) as a初始化变量@i为0
@type2 := type2 将当前行的 type2 字段 赋值给 @type2变量
( @i := CASE WHEN @type2 = type2 THEN @i + 1 ELSE 1 END ) AS rownum 来判断当前行的type2值是否与前一行的type2相同,从而决定@i的值是递增还是重置为1

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值