分组后取每组内排名的Top N的SQL语句
2016-01-29 13:56
801 查看
给个MySQL例子参考
-----查询每门课程的前2名成绩
CREATE TABLE StudentGrade(
stuId CHAR(4), --学号
subId INT, --课程号
grade INT, --成绩
PRIMARY KEY (stuId,subId)
)
GO
--表中数据如下
INSERT INTO StudentGrade(stuId,subId,grade) VALUES( '001 ',1,97);
INSERT INTO StudentGrade(stuId,subId,grade) VALUES( '001 ',2,50);
INSERT INTO StudentGrade(stuId,subId,grade) VALUES( '001 ',3,70);
INSERT INTO StudentGrade(stuId,subId,grade) VALUES( '002 ',1,92);
INSERT INTO StudentGrade(stuId,subId,grade) VALUES( '002 ',2,80);
INSERT INTO StudentGrade(stuId,subId,grade) VALUES( '002 ',3,30);
INSERT INTO StudentGrade(stuId,subId,grade) VALUES( '003 ',1,93);
INSERT INTO StudentGrade(stuId,subId,grade) VALUES( '003 ',2,95);
INSERT INTO StudentGrade(stuId,subId,grade) VALUES( '003 ',3,85);
INSERT INTO StudentGrade(stuId,subId,grade) VALUES( '004 ',1,73);
INSERT INTO StudentGrade(stuId,subId,grade) VALUES( '004 ',2,78);
INSERT INTO StudentGrade(stuId,subId,grade) VALUES( '004 ',3,87);
GO
--查看数据
select * from StudentGrade
--假如出现并列时,也只取两个同学的话。
--方法一:
select distinct *
from studentgrade as t1
where stuid in
(select top 2 stuid
from studentgrade as t2
where t1.subid=t2.subid
order by t2.grade desc)
order by subid, grade desc
--方法二:
select * from StudentGrade a where (select count(1) from studentGrade where subId=a.subId and grade> =a.grade) <=2
--方法三:
select * from StudentGrade t
where (select count(1) from StudentGrade where subid=t.subid and grade> t.grade) <=1
order by subId,grade desc
--结果
drop table StudentGrade
相关文章推荐
- mysql 常用option
- 脚步监控mysql主从是否正常
- MySQL监控工具-orztop
- MySQL监控工具-orzdba
- Tuning options for SQL Server when running in high performance workloads
- Mysql配置为Master/Slave的常用维护命令
- MySql Replication 常用架构
- SQL truncate 、delete与drop区别
- SQL drop delete truncate
- centos中lnmp下开启pgo_mysql扩展
- PostgreSQL COPY 导入/导出数据
- OpenWrt 自学笔记(4)------交叉编译SQLite3
- mytop安装,使用mytop监控MySQL性
- MySQL架构
- PLSQL Developer 的安装与使用(连接Linux下的Oracle数据库)
- mysql状态查看 QPS/TPS/缓存命中率查看
- sql语句中----删除表数据drop、truncate和delete的用法
- 【Oracle XE系列之二】PLSQL Developer 远程连接Oracle XE数据库
- Sql语句中的truncate,delete,drop的区别
- erlang驱动使用mysql-otp