用oracle 用习惯了 突然使用mysql 有点不习惯 ,
今天有一个需求是分组统计, 类似于 得到每个班级的前三名 这种需求
首先想到的是使用开窗函数, 但这是mysql, mysql 8.x版本才支持开窗函数,
服务器上装的是5.x 用不了啊, 于是一找了度娘, 如下sql语句和自己的理解(注释)
exp: 统计一年级各班前三名
SELECT
*
FROM
T_SCORE A
where
A.GRADE = 1 -- 这里的限制条件 子查询中也要带上
AND (
SELECT
COUNT(1)
FROM
T_SCORE B
WHERE
B.GRADE = 1 -- 条件也要带上
AND B.CLASS = A.CLASS -- 按class分组
AND B.S_SCORE >= A.S_SCORE -- 按分数排序,由大到小
) <= 3 -- 取前三名
ORDER BY
GRADE,
CLASS,
S_SCORE DESC