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

私念 2017-07-03 08:31:36
请教个 mysql问题 一个表 有 学科ID 学生ID 和 成绩

如何查询 每个学科 前两名 一个学科第一名有可能有多个人并列 例如数据如下:

学科 学生 成绩
1 1 90
2 1 100
2 2 100
2 3 100
2 4 90
3 1 90
3 2 100
3 3 85

...全文
516 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
私念 2017-07-05
  • 打赏
  • 举报
回复
为啥 我有个表 t_score 给 score字段加索引了 select * from t_score where score>100; 可以用到索引 select * from t_score where score<90; 用不上索引呢 score的范围是 1-100
二月十六 2017-07-04
  • 打赏
  • 举报
回复
二月十六 2017-07-04
  • 打赏
  • 举报
回复
select 学生,学科,成绩 from(
SELECT
CASE
WHEN @学科 != 学科 THEN @dense_rank:= 1
WHEN @成绩 = 成绩 THEN @dense_rank
ELSE @dense_rank:= @dense_rank + 1
END AS DENSE_RANK,
学生,
@学科 :=学科 AS 学科,
@成绩 := 成绩 AS 成绩
FROM
(SELECT @学科:='') k,
(SELECT @成绩:=0) v,
(SELECT @dense_rank:=0) d,
表名 main
ORDER BY
学科,成绩 desc)t where t.DENSE_RANK<=2

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧