MySql中@符号的使用

本文介绍了MySQL中@符号的使用,主要涉及语句级变量的定义及其实例,通过@符号实现类似窗口函数的效果,如行号(rownum)计算和分组内的序列生成。示例中展示了如何利用@符号进行值的累加,并在查询中动态更新变量,以达到在不支持窗口函数的MySQL版本中模拟窗口功能的目的。
摘要由CSDN通过智能技术生成

MySql中@符号的使用

@符号的作用

  • @后接变量名,用以定义一个变量,该变量的有效期为语句级,即再一次执行中始终有效,基本示例如下:
-- 由于通常情况下=被认为是等于比较运算符,因此赋值运算符一般使用:=
SELECT @lt:=1, @lt:=@lt+1, @lt:=@lt+1;

在这里插入图片描述

实现rownum

-- 由于tmp只有一行,当这两表进行笛卡尔积链接时,结果集实际上等同于增加了一列,而由于r变量的特性,每行都在原值的基础上在进行增加操作
SELECT a.BATCHNO, a.YEAR, @r:=@r+1 FROM m1 a, (SELECT @r:=0) tmp;

在这里插入图片描述

实现窗口函数

-- base变量的初值,不能与窗口函数中partition by分组的枚举值相同
-- 实现此功能 row_number() (partition by base order by batchno) rn
-- case when 和 @base:= 的顺序不能颠倒,否则会有问题
SELECT a.BATCHNO, a.YEAR, a.BUDITEM, case when @base=a.BUDITEM then @r:=@r+1 ELSE
@r:=1 END rn, @base:=a.BUDITEM FROM m1 a, (SELECT @r:=1, @base:='') tmp ORDER BY a.buditem

在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值