CREATE TABLE `student` (
`id` int(0) NOT NULL,
`name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`score` int(0) NULL DEFAULT NULL,
`clazz` int(0) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES (1, '张三6', 66, 1);
INSERT INTO `student` VALUES (2, '张三5', 65, 1);
INSERT INTO `student` VALUES (3, '张三4', 64, 1);
INSERT INTO `student` VALUES (4, '张三3', 63, 1);
INSERT INTO `student` VALUES (5, '张三2', 62, 1);
INSERT INTO `student` VALUES (11, '李四6', 76, 2);
INSERT INTO `student` VALUES (12, '李四5', 75, 2);
INSERT INTO `student` VALUES (13, '李四4', 74, 2);
INSERT INTO `student` VALUES (14, '李四3', 73, 2);
INSERT INTO `student` VALUES (15, '李四2', 72, 2);
查询语句:
SELECT
*
FROM
`student` s
WHERE
EXISTS (
SELECT
COUNT(*)
FROM
`student` st
WHERE
st.score >= s.score
AND st.clazz = s.clazz
GROUP BY
st.clazz
HAVING
COUNT(*) <= 3
)
ORDER BY
clazz,
score DESC;
主要考的是exists这个聚合函数,还有就是这个思想就是外层的拿到exists里面看看true或者false;
如果进去,发现比他大的数量不超过三个。
那么也就是结果