mysql 分数排名

表table1

字段1:chengji(成绩)      字段2:paiming(排名)
50                              0
80                              0
70                              0
20                              0
90                              0

如何用1条MYSQL查询语句,运行后让他们变成:

字段1:chengji(成绩)      字段2:paiming(排名)
50                              4
80                              2
70                              3
20                              5
90                              1

------Solutions------
/*表结构*/
CREATE TABLE `t1` (                     
          `xingming` char(10) default NULL,     
          `chengji` decimal(6,2) default NULL,   
          KEY `chengji` (`chengji`)               
        ) ;
/*数据*/
insert into t1 (xingming,chengji)
       values
       ('张一',50),
       ('张二',80),
       ('张三',70),
       ('张四',20),
       ('张五',90),
       ('张六',90),
       ('张七',70);
/*思路
排名是这样的
先按分数排序
如果分数一样,则并列第几名
分数不一样,则是他的顺序号
用三个变量实现
@chengji  保存成绩
@mingci 保存名次
@shunxu 保存顺序
*/
set @chengji=0;
set @mingci=1;
set @shunxu=0;
/*sql语句*/
select xingming,chengji,mingci
    from
(select xingming,chengji,
@shunxu:=@shunxu+1,
if(chengji=@chengji,@mingci,@mingci:=@shunxu) as mingci,
@chengji:=chengji
 from t1 order by chengji desc) as t;
/*查询结果

"张五""90.00""1"
"张六""90.00""1"
"张二""80.00""3"
"张三""70.00""4"
"张七""70.00""4"
"张一""50.00""6"
"张四""20.00""7"

*/
------Solutions------


这个表增加一个字段paiming,
然后用update语句来让paiming字段都增加上数据


/*表结构*/
CREATE TABLE  `t1` (                   
          `xingming` char(10) default NULL,   
          `chengji` decimal(6,2) default NULL,
           `mingci` int(3) NOT NULL,            
          KEY `t1` (xingming,chengji)            
        ) ;
/*数据*/
insert into t1 (xingming,chengji)
      values
      ('张一',50),
      ('张二',80),
      ('张三',70),
      ('张四',20),
      ('张五',90),
      ('张六',90),
      ('张七',70);
/*思路
排名是这样的
先按分数排序
如果分数一样,则并列第几名
分数不一样,则是他的顺序号
用三个变量实现
@chengji  保存成绩
@mingci 保存名次
@shunxu 保存顺序
*/
set @chengji=0;
set @mingci=1;
set @shunxu=0;
/*sql语句*/
update t1,
(select xingming,chengji,
@shunxu:=@shunxu+1,
if(chengji=@chengji,@mingci,@mingci:=@shunxu) as mingci,
@chengji:=chengji
from t1 order by chengji desc) as t2
set t1.mingci=t2.mingci
WHERE t1.xingming=t2.xingming and t1.chengji=t2.chengji;


select xingming,chengji,mingci from t1 order by mingci desc;
/*查询结果
"张四""20.00""7"
"张一""50.00""6"
"张三""70.00""4"
"张七""70.00""4"
"张二""80.00""3"
"张五""90.00""1"
"张六""90.00""1"
*/



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值