一个排名的方式:请大侠帮忙解释(新手学习中)
创建一个表:(便于看懂后面的程序)
CREATE TABLE `test` (
`student_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`subject` varchar(10) CHARACTER SET latin1 DEFAULT NULL,
`score` tinyint(4) DEFAULT NULL,
PRIMARY KEY (`student_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
insert into `test`(`student_id`,`subject`,`score`) values (1,'yw',80);
insert into `test`(`student_id`,`subject`,`score`) values (2,'sx',90);
insert into `test`(`student_id`,`subject`,`score`) values (3,'yw',85);
insert into `test`(`student_id`,`subject`,`score`) values (4,'sx',95);
insert into `test`(`student_id`,`subject`,`score`) values (5,'yw',70);
insert into `test`(`student_id`,`subject`,`score`) values (6,'sx',100);
insert into `test`(`student_id`,`subject`,`score`) values (7,'yw',70);
insert into `test`(`student_id`,`subject`,`score`) values (8,'sx',70);
以上可以创建一个表。
下面是程序:
select subject as sbn , student_id as sid, score,
@rank:=case when @sn <> subject then 1 when @score <> score then @rank+1 else @rank+0 end as rank,
@sn := subject as sn,
@score := score as score
from `test` p,
(select @rank := 0) r,
(select @sn := '') u,
(select @score := -1) i
order by subject, score;
请问:1、这个最后的结果排名弄反了,小值反而是排第一名。如何修改才能是最大值是第一名。
2、能否解释第二行是什么意思?
3、最后的p r u i 是什么作用。
谢谢
创建一个表:(便于看懂后面的程序)
CREATE TABLE `test` (
`student_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`subject` varchar(10) CHARACTER SET latin1 DEFAULT NULL,
`score` tinyint(4) DEFAULT NULL,
PRIMARY KEY (`student_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
insert into `test`(`student_id`,`subject`,`score`) values (1,'yw',80);
insert into `test`(`student_id`,`subject`,`score`) values (2,'sx',90);
insert into `test`(`student_id`,`subject`,`score`) values (3,'yw',85);
insert into `test`(`student_id`,`subject`,`score`) values (4,'sx',95);
insert into `test`(`student_id`,`subject`,`score`) values (5,'yw',70);
insert into `test`(`student_id`,`subject`,`score`) values (6,'sx',100);
insert into `test`(`student_id`,`subject`,`score`) values (7,'yw',70);
insert into `test`(`student_id`,`subject`,`score`) values (8,'sx',70);
以上可以创建一个表。
下面是程序:
select subject as sbn , student_id as sid, score,
@rank:=case when @sn <> subject then 1 when @score <> score then @rank+1 else @rank+0 end as rank,
@sn := subject as sn,
@score := score as score
from `test` p,
(select @rank := 0) r,
(select @sn := '') u,
(select @score := -1) i
order by subject, score;
请问:1、这个最后的结果排名弄反了,小值反而是排第一名。如何修改才能是最大值是第一名。
2、能否解释第二行是什么意思?
3、最后的p r u i 是什么作用。
谢谢
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货