日期:2014-05-18  浏览次数:20660 次

mysql分组并排序
做一个统计。比如某学校的学生成绩。当我将年级分组后对每个班的总成绩排名次。将这个统计结果插入一个新表。求解分组后如何排名次。如: 
初一 3班 465 1 
初一 1班 455 2 
初一 2班 444 3 
初二 4班 524 1 
初二 3班 475 2 
初二 1班 455 3 
初二 2班 444 4  
没什么分,真心求教。

------解决方案--------------------
SQL code

create table fan
(年级 varchar(6),班级 varchar(6),总成绩 int)

insert into fan
select '初一', '3班', 465 union all
select '初一', '1班', 455 union all
select '初一', '2班', 444 union all
select '初二', '4班', 524 union all
select '初二', '3班', 475 union all
select '初二', '1班', 455 union all
select '初二', '2班', 444


select 年级,班级,总成绩,
row_number() over(partition by 年级 order by 总成绩 desc) '名次'
from fan
order by 年级 desc

/*
年级     班级     总成绩         名次
------ ------ ----------- --------------------
初一     3班     465         1
初一     1班     455         2
初一     2班     444         3
初二     4班     524         1
初二     3班     475         2
初二     1班     455         3
初二     2班     444         4

(7 row(s) affected)
*/