Sql取出各科分數前三名的學生,Sql各科成績前三的學生


 

Sql取出各科分數前三名的學生,Sql各科成績前三的學生

 

 

================================

©Copyright 蕃薯耀 2021-06-09

https://www.cnblogs.com/fanshuyao/

 

一、取出各科成績前三的學生

#取出各科成績前三的學生

CREATE TABLE stu_score(

    id INT PRIMARY KEY AUTO_INCREMENT,
    stu_id INT,
    stu_name VARCHAR(50),
    clazz VARCHAR(20),
    score DOUBLE,
    remark VARCHAR(50)
);


INSERT INTO stu_score(stu_id,stu_name,clazz,score) VALUES (1, '小趙', '語文', 80);
INSERT INTO stu_score(stu_id,stu_name,clazz,score) VALUES (1, '小趙', '數學', 85);
INSERT INTO stu_score(stu_id,stu_name,clazz,score) VALUES (1, '小趙', '英語', 90);
INSERT INTO stu_score(stu_id,stu_name,clazz,score) VALUES (1, '小趙', '化學', 90);

INSERT INTO stu_score(stu_id,stu_name,clazz,score) VALUES (2, '小錢', '語文', 88);
INSERT INTO stu_score(stu_id,stu_name,clazz,score) VALUES (2, '小錢', '數學', 88);
INSERT INTO stu_score(stu_id,stu_name,clazz,score) VALUES (2, '小錢', '英語', 98);
INSERT INTO stu_score(stu_id,stu_name,clazz,score) VALUES (2, '小錢', '化學', 92);

INSERT INTO stu_score(stu_id,stu_name,clazz,score) VALUES (3, '小孫', '語文', 70);
INSERT INTO stu_score(stu_id,stu_name,clazz,score) VALUES (3, '小孫', '數學', 78);
INSERT INTO stu_score(stu_id,stu_name,clazz,score) VALUES (3, '小孫', '英語', 96);
INSERT INTO stu_score(stu_id,stu_name,clazz,score) VALUES (3, '小孫', '化學', 95);

INSERT INTO stu_score(stu_id,stu_name,clazz,score) VALUES (4, '小李', '語文', 85);
INSERT INTO stu_score(stu_id,stu_name,clazz,score) VALUES (4, '小李', '數學', 98);
INSERT INTO stu_score(stu_id,stu_name,clazz,score) VALUES (4, '小李', '英語', 88);
INSERT INTO stu_score(stu_id,stu_name,clazz,score) VALUES (4, '小李', '化學', 98);

INSERT INTO stu_score(stu_id,stu_name,clazz,score) VALUES (5, '小王', '語文', 90);
INSERT INTO stu_score(stu_id,stu_name,clazz,score) VALUES (5, '小王', '數學', 80);
INSERT INTO stu_score(stu_id,stu_name,clazz,score) VALUES (5, '小王', '英語', 85);
INSERT INTO stu_score(stu_id,stu_name,clazz,score) VALUES (5, '小王', '化學', 78);

INSERT INTO stu_score(stu_id,stu_name,clazz,score) VALUES (6, '小陳', '語文', 87);
INSERT INTO stu_score(stu_id,stu_name,clazz,score) VALUES (6, '小陳', '數學', 97);
INSERT INTO stu_score(stu_id,stu_name,clazz,score) VALUES (6, '小陳', '英語', 84);
INSERT INTO stu_score(stu_id,stu_name,clazz,score) VALUES (6, '小陳', '化學', 80);

INSERT INTO stu_score(stu_id,stu_name,clazz,score) VALUES (7, '小朱', '語文', 80);
INSERT INTO stu_score(stu_id,stu_name,clazz,score) VALUES (7, '小朱', '數學', 88);#和小錢88分一樣,並列第三
INSERT INTO stu_score(stu_id,stu_name,clazz,score) VALUES (7, '小朱', '英語', 98);#並列第一
INSERT INTO stu_score(stu_id,stu_name,clazz,score) VALUES (7, '小朱', '化學', 95);#並列批二


SELECT * FROM stu_score ss ORDER BY ss.`clazz`,ss.`score` DESC;


#取出各科成績前三的學生
#1、取出一名學生A某個學科的成績
#2、然后和所有的學生同一個學科的成績比較
#3、當存在該學科的成績比學生A的成績大且總人數不大於3,或者該學科成績沒有大於學生A的,則表示學生A的成績在前三
#4、然后根據學科、分數(降序)排序取出
SELECT * FROM stu_score ss1 
WHERE (
SELECT COUNT(*) FROM stu_score ss2
WHERE ss2.`clazz`=ss1.`clazz` AND ss2.`score` > ss1.`score`
) < 3
ORDER BY ss1.`clazz`,ss1.`score` DESC;

 

 

最后的查詢結果:

    id  stu_id  stu_name  clazz       score  remark  
------  ------  --------  ------     ------  --------
    16       4  小李        化學          98  (NULL)  
    12       3  小孫        化學          95  (NULL)  
    28       7  小朱        化學          95  (NULL)  
    14       4  小李        數學          98  (NULL)  
    22       6  小陳        數學          97  (NULL)  
     6       2  小錢        數學          88  (NULL)  
    26       7  小朱        數學          88  (NULL)  
     7       2  小錢        英語          98  (NULL)  
    27       7  小朱        英語          98  (NULL)  
    11       3  小孫        英語          96  (NULL)  
    17       5  小王        語文          90  (NULL)  
     5       2  小錢        語文          88  (NULL)  
    21       6  小陳        語文          87  (NULL)  

 截圖:

 

 

二、取出各科成績都不小於85分的學生

 

#取出各科成績都不小於85分的學生
#如果一個學生所有學科的分數中,最小的都>=85,則表示該學生每科成績都不小於85
SELECT stu_name,MIN(score) FROM stu_score  
GROUP BY stu_name HAVING MIN(score) >=85 
ORDER BY MIN(score) DESC;

 

查詢結果:

stu_name    MIN(score)  
--------    ------------
小錢           88
小李           85

 

 

 

(時間寶貴,分享不易,捐贈回饋,^_^)

 

================================

©Copyright 蕃薯耀 2021-06-09

https://www.cnblogs.com/fanshuyao/

 


免責聲明!

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



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