临时变量用@表示,全局变量用户@@表示
Oracle和SQL server有row number over partition by 函数,可用于实现分组排序。但MySQL没有,实现分组排序或累加计算时,需要通过临时变量@实现。
例如 当前SCORE表记录了每个学生的各科成绩,获取每个学生的最差学科成绩
user_id | subject | score |
---|---|---|
赵三 | 数学 | 89 |
赵三 | 语文 | 91 |
赵三 | 英语 | 46 |
李四 | 数学 | 62 |
李四 | 语文 | 65 |
李四 | 英语 | 96 |
select
a.user_id,a.subject,a.score,
# 如果是同一个用户(同一个组),在之前的序号+1,不是同一个,序号=1
if(@g=a.user_id,@rank: