mysql 如何查询 每个学科 前两名

[复制链接]
查看11 | 回复3 | 2021-1-27 06:57:18 | 显示全部楼层 |阅读模式
请教个mysql问题一个表有学科ID学生ID和成绩
如何查询每个学科前两名一个学科第一名有可能有多个人并列例如数据如下:
学科学生成绩
1190
21100
22100
23100
2490
3190
32100
3385

分 -->
回复

使用道具 举报

千问 | 2021-1-27 06:57:18 | 显示全部楼层
select学生,学科,成绩from(
SELECT
CASE
WHEN@学科!=学科THEN@dense_rank:=1
WHEN@成绩=成绩THEN@dense_rank
ELSE@dense_rank:=@dense_rank+1
ENDASDENSE_RANK,
学生,
@学科:=学科AS学科,
@成绩:=成绩AS成绩
FROM
(SELECT@学科:='')k,
(SELECT@成绩:=0)v,
(SELECT@dense_rank:=0)d,
表名main
ORDERBY
学科,成绩desc)twheret.DENSE_RANK
回复

使用道具 举报

千问 | 2021-1-27 06:57:18 | 显示全部楼层



回复

使用道具 举报

千问 | 2021-1-27 06:57:18 | 显示全部楼层
为啥我有个表t_score给score字段加索引了
select*fromt_scorewherescore>100;可以用到索引
select*fromt_scorewherescore<90;用不上索引呢

score的范围是1-100
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行