建表语句如下: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这一步
解决方案 »
- mysql5.5怎样关掉不需要的存储引擎以节省系统资源
- mysql
- mysql_autocommit 这个在哪个头文件里面啊,怎么我这没有啊>??
- mysql存储过程中如何求出数据表统计列所占百分比
- 请教一个MYSQL 自定义函数问题.
- 数据库为 SQL_ASCII 编码,为什么用程序从txt文件中将数据导入进数据库就是乱码??在线跪求!!!!
- mysql用SQL如何实现插入数据时,如果数据已经存在就更新?
- 求解?面对 MYSQL 偶不知如何下手,特请诸位大侠给予帮助切切!!!
- 求按日取出当日最大值的语句
- MySQL表中插入一条数据后通过触发器修改该条数据
- 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