建表语句如下:create table test(a int , b int, c int);insert into test select 1, 2, 20;
insert into test select 1, 3, 21;
insert into test select 1, 4, 22;
insert into test select 1, 5, 23;
insert into test select 1, 6, 24;
insert into test select 2, 7, 25;
insert into test select 2, 8, 26;
insert into test select 2, 9, 27;
insert into test select 2, 10,28;
insert into test select 2, 11,29;查询语句如下:
select a, b, c, if(@a=X.a, @rank:=@rank+1, @rank:=1) as rank, @a:=X.a
from
(select a,b,c from test order by a, b, c) X 问题是在这个查询在某个connection中第一次查看所有的rank都是1如果多查询几次,rank就正常了
但是如果语句改为:
select a, b, c, if(@a=X.a, @rank:=@rank+1, @rank:=1) as rank, @a:=X.a
from
(select @a:=null, @rank:=0, a,b,c from test order by a, b, c) X
那这样即使第一次查询也是对的问题是为什么需要@a:=null, @rank:=0这一步
insert into test select 1, 3, 21;
insert into test select 1, 4, 22;
insert into test select 1, 5, 23;
insert into test select 1, 6, 24;
insert into test select 2, 7, 25;
insert into test select 2, 8, 26;
insert into test select 2, 9, 27;
insert into test select 2, 10,28;
insert into test select 2, 11,29;查询语句如下:
select a, b, c, if(@a=X.a, @rank:=@rank+1, @rank:=1) as rank, @a:=X.a
from
(select a,b,c from test order by a, b, c) X 问题是在这个查询在某个connection中第一次查看所有的rank都是1如果多查询几次,rank就正常了
但是如果语句改为:
select a, b, c, if(@a=X.a, @rank:=@rank+1, @rank:=1) as rank, @a:=X.a
from
(select @a:=null, @rank:=0, a,b,c from test order by a, b, c) X
那这样即使第一次查询也是对的问题是为什么需要@a:=null, @rank:=0这一步
解决方案 »
- mysql 启动不了。救命呀。。
- mysql-front打开后显示联网问题,主机不能定位!
- 求mysql sql语句
- 这条子查询如何改为联合查询?
- postgresql是否支持这个功能?
- mysql中如何把时区设置成中国时区?
- ?mysql 的phpMyAdmin不可用,报错Can't connect to local MySQL server through socket '/tmp/mysql.sock'(2)
- 麻烦大家看看我的一个小问题(在线请求帮助)
- 怎么将一个300MB的文件插到mysql数据库的一个字段中啊?仅用mysql 命令行工具
- 连接mysql时出现1251错误,怎么解决?
- Mysql 表分区查询为什么会变慢呢?
- select for update
你直接运行
select a, b, c, if(@a=X.a, @rank:=@rank+1, @rank:=1) as rank, @a:=X.a
from test X order by a, b, c
会提示出错,变量必须赋初值,语法要求
@A无论是否赋初值,第1次值都为NULL
select a, b, c, @a, if(@a=X.a, @rank:=@rank+1, @rank:=1) as rank, @a:=X.a from (select a,b,c from test order by a, b, c) X 在connection中第一次查询的时候这个语句在查询到X表的第二条记录的时候就应该@a有值了,应该为X表的第一条数据但是可以看到实际结果@a在所有记录中都是null如何解释这个现象?
SELECT a, b, c, @a, IF(@a=X.a, @rank:=@rank+1, @rank:=1) AS rank, @a:=GREATEST(0,X.a )
FROM (SELECT a,b,c FROM test ORDER BY a, b, c) X