创建表
create table student ( name varchar(20) , lesson varchar(20), mark float ) ;
插入数据
insert into student values(\'john\',\'Math\',60); insert into student values(\'john\',\'Eng\',50); insert into student values(\'john\',\'HIstory\',56); insert into student values(\'Mike\',\'Eng\',51); insert into student values(\'Mike\',\'Math\',59); insert into student values(\'Mike\',\'HIstory\',55); insert into student values(\'Mark\',\'Eng\',71); insert into student values(\'Mark\',\'Math\',89); insert into student values(\'Mark\',\'HIstory\',95); insert into student values(\'张三\',\'Eng\',61); insert into student values(\'张三\',\'Math\',79); insert into student values(\'张三\',\'HIstory\',85); insert into student values(\'李明\',\'Eng\',51); insert into student values(\'李明\',\'Math\',69); insert into student values(\'李明\',\'HIstory\',95);
查询
#方法一 SELECT T1.* FROM student T1 LEFT JOIN ( SELECT DISTINCT lesson,mark FROM student) T2 ON T1.lesson = T2.lesson AND T1.mark <= T2.mark GROUP BY name,lesson,mark HAVING COUNT(1) <= 3 ORDER BY lesson,mark DESC; #方法二 SELECT s1.* FROM student s1 WHERE ( SELECT COUNT(1) FROM student s2 WHERE s1.lesson=s2.lesson AND s1.mark<s2.mark)<3 ORDER BY s1.lesson,s1.mark DESC;