学习过mysql的同学,大都体会过mysql的一个的痛点,那就是mysql没有支持分组排序的开窗函数。但是我们能够通过使用变量来达到这个目的。
我们先来创建一个人员年龄表(如下),有个这样的需求是,根据不同性别进行分组排序他们的年龄,并得到序列号
CREATE TABLE person (id int, first_name varchar(20), age int, gender char(1));
INSERT INTO person VALUES (1, 'Bob', 25, 'M');
INSERT INTO person VALUES (2, 'Jane', 20, 'F');
INSERT INTO person VALUES (3, 'Jack', 30, 'M');
INSERT INTO person VALUES (4, 'Bill', 32, 'M');
INSERT INTO person VALUES (5, 'Nick', 22, 'M');
INSERT INTO person VALUES (6, 'Kathy', 18, 'F');
INSERT INTO person VALUES (7, 'Steve', 36, 'M');
INSERT INTO person VALUES (8, 'Anne', 25, 'F');
我们先来得到想要的结果,然后来和大家解释下
select
first_name,
gender,
age ,
rank
from
(select
first_name,
gender,
age,
@rank:=if(@gen=gender,@rank+1,1) rank,
@gen:=gender
from person,(select @rank:=0,@gen:=null) temp
order by gender, age asc) b
结果如下:

本文探讨了MySQL如何使用变量实现分组排序,通过一个人员年龄表的例子,详细解释了变量赋值和分组排序的代码流程。重点在于理解在SQL语句执行顺序中,`ORDER BY`似乎先于`SELECT`执行,以及在`SELECT`后的变量赋值必须使用`:=`而非`=`。最后提到了注意事项,提醒读者在`SELECT`后的赋值操作要使用`:=`。

1930

被折叠的 条评论
为什么被折叠?



