1.先创建表

CREATE TABLE IF NOT EXISTS  student(
   id varchar(20),-- 编号
   class varchar(20),-- 年级
   score int-- 分数
);

2.插入相关数据

INSERT INTO student VALUES ('1','一班',88);
INSERT INTO student VALUES ('2','一班',100);
INSERT INTO student VALUES ('3','一班',65);
INSERT INTO student VALUES ('4','一班',78);
INSERT INTO student VALUES ('5','一班',36);
INSERT INTO student VALUES ('6','二班',88);
INSERT INTO student VALUES ('7','二班',82);
INSERT INTO student VALUES ('8','二班',96);
INSERT INTO student VALUES ('9','二班',53);
INSERT INTO student VALUES ('10','二班',72);
INSERT INTO student VALUES ('11','三班',88);
INSERT INTO student VALUES ('12','三班',66);
INSERT INTO student VALUES ('13','三班',89);
INSERT INTO student VALUES ('14','三班',99);
INSERT INTO student VALUES ('15','三班',56);
INSERT INTO student VALUES ('16','三班',72);

3.查询

SELECT
    a.class,
    a.score
FROM
    student a
WHERE
    (
        SELECT
            count(*)
        FROM
            student
        WHERE
            a.class = class
        AND a.score < score
    ) < 3
ORDER BY
    a.class,
    a.score DESC;

结果

分析: 查询出每个班级的前三名就是 每个人统计处自己班级里超过自己分数的有几个,然后筛选出小于三个的

            where中的select是保证:遍历所有记录,取每条记录与当前记录做比较,只有当student表中同一班级不超过3个人分数    
          比自己高时,这个学生才算是分数排行的前三名。也就是括号里面是查询在这一班级中分数比他高的人的数量。

 

技术
©2019-2020 Toolsou All rights reserved,
一个名叫“讨火车”的小村子 终于把火车讨来了运营商 网站访客手机号码抓取hive压缩&&hdfs合并小文件精准手机号抓取,运营商大数据函数基本定义和使用‘未完待续Spring Boot教程十六:SpringBoot注入类实现多线程基于神经网络的车辆牌照字符识别技术MyBatis 新增数据 成功 返回 自增主键ID值json反斜杠问题接错水管喝了三年软水?软水和软水机究竟有何用