MySQl查詢各科成績前三名


創建表

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;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM