mysql查询各班前3名成绩

CREATE TABLE sc

(

  id    INT,

  name  VARCHAR(20),

  class VARCHAR(20),

  score INT

);



INSERT INTO sc VALUES (11, 'zx', '一年1班', 68);

INSERT INTO sc VALUES (12, 'zx1', '一年1班', 98);

INSERT INTO sc VALUES (13, 'zx2', '一年1班', 58);

INSERT INTO sc VALUES (14, 'zx3', '一年1班', 48);

INSERT INTO sc VALUES (15, 'zx4', '一年2班', 88);

INSERT INTO sc VALUES (16, 'zx5', '一年2班', 68);

INSERT INTO sc VALUES (17, 'zx6', '一年2班', 98);

INSERT INTO sc VALUES (18, 'zx7', '一年3班', 78);

INSERT INTO sc VALUES (19, 'zx8', '一年2班', 58);

INSERT INTO sc VALUES (20, 'zx9', '一年1班', 88);

INSERT INTO sc VALUES (21, 'zx10', '一年3班', 83);

INSERT INTO sc VALUES (22, 'zx11', '一年3班', 82);

INSERT INTO sc VALUES (23, 'zx12', '一年3班', 81);



SELECT

  s1.name,

  s1.class,

  s1.score

FROM sc s1

WHERE

  (

    SELECT count(1)

    FROM sc s2

    WHERE

      s1.class = s2.class AND s2.score >= s1.score

  ) <= 3

ORDER BY s1.class, s1.score DESC;

优化:使用存储过程或函数来分批查询 

 

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值