一个排名的方式:请大侠帮忙解释(新手学习中)
创建一个表:(便于看懂后面的程序)
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  是什么作用。
谢谢

解决方案 »

  1.   

    order by subject, score desc;先自己写一下你的理解吧,哪怕猜一下都行,否则别人可能需要写上千个字,结果你仍然无法明白。别名。
      

  2.   

    实际上应先看最后几行,首先把表排序,按subject, score排序。再给@rank  @sn  @score附一个起始值(不理解起一个别名的作用?我试了一下,不起别名不管);每一个值是什么意思由@sn := subject as sn,   @score := score as score  @rank:=…………来定义的,只不过@rank是由一个语句来实现的。如果@sn <> subject 则rank就为1;否则 如果 @score <> score则@rank+1 如果相等则就为 @rank+0。不知这样理解是否正确?
      

  3.   

    你自己在另一个贴子中的解释已经很清楚了。http://topic.csdn.net/u/20120917/21/2e0addf7-6e09-435d-8ce9-7ca1b6713ec7.html