mysql 如何查询每门功课成绩的前两名

motenai2 2018-02-21 05:51:17

表名tsss

结构:
+----+-------+---------+--------+
| id | name | kecheng | fenshu |
+----+-------+---------+--------+
| 1 | 张三 | 语文 | 10 |
| 2 | 张三 | 数学 | 82 |
| 3 | 李四 | 语文 | 10 |
| 4 | 李四 | 数学 | 82 |
| 5 | 王五 | 语文 | 20 |
| 6 | 王五 | 数学 | 10 |
| 7 | 王五 | 英语 | 100 |

望指点,谢谢
...全文
4196 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_42608169 2018-07-18
  • 打赏
  • 举报
回复 1
引用 楼主 motenai2 的回复:
表名tsss

结构:
+----+-------+---------+--------+
| id | name | kecheng | fenshu |
+----+-------+---------+--------+
| 1 | 张三 | 语文 | 10 |
| 2 | 张三 | 数学 | 82 |
| 3 | 李四 | 语文 | 10 |
| 4 | 李四 | 数学 | 82 |
| 5 | 王五 | 语文 | 20 |
| 6 | 王五 | 数学 | 10 |
| 7 | 王五 | 英语 | 100 |

望指点,谢谢



SELECT t1.name,t1.kecheng,t1.fenshu FROM tsss t1 WHERE
(
SELECT count(1) FROM tsss t2 WHERE
t1.kecheng=t2.kecheng AND t2.fenshu>=t1.fenshu
)<=2
ORDER BY t1.kecheng,t1.fenshu DESC;




  • 打赏
  • 举报
回复
楼上的两个都是正解!
autumnWan 2018-07-18
  • 打赏
  • 举报
回复
SELECT a.*
FROM tsss a
WHERE 2 > (
SELECT COUNT(t.id) FROM tsss t WHERE t.kecheng = a.kecheng AND t.fenshu > a.fenshu
)
ORDER BY
a.kecheng,a.fenshu ;
重复的值会查询出 2条
motenai2 2018-02-22
  • 打赏
  • 举报
回复
引用 1 楼 ayalicer 的回复:
用变量实现 row_number 再取rowid<=2的
代码?用变量实现 row_number 再取rowid<=2的 。 不会啊。
  • 打赏
  • 举报
回复
用变量实现 row_number 再取rowid<=2的

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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