sql多表查詢分組最大值

問題描述:有三張表:學生表Student(id,name),id爲主鍵;課程表Subject(id,name),id爲主鍵;分數表score(studentid,subjectid,score),其中studentId與subjectid爲聯合主鍵,一句sql語句查詢出:學號,姓名,課程名,課程最高分.

模擬實現如下:

三張表:

CREATE TABLE student
(
 id INT PRIMARY KEY AUTO_INCREMENT,
 `name` VARCHAR(20)
)
CREATE TABLE subjects(
  id INT PRIMARY KEY AUTO_INCREMENT,
  `name` VARCHAR(20)
)
CREATE TABLE score(
  studentid INT REFERENCES student(id),
  subjectid INT REFERENCES subjects(id),
  score INT,
  PRIMARY KEY(studentid,subjectid)
)
模擬插入的數據如下:

INSERT INTO student VALUES(NULL,'zhangSan');
INSERT INTO student VALUES(NULL,'liSi');
INSERT INTO  subjects VALUES(NULL,'Chinese');
INSERT INTO  subjects VALUES(NULL,'English');
INSERT INTO score VALUES(1,1,60);
INSERT INTO score VALUES(1,2,90);
INSERT INTO score VALUES(2,1,70);
INSERT INTO score VALUES(2,2,80);

每個人解題都有自己的思路,我說一下我自己的思路:我認爲難點在於要分組查詢出每個學科的最高分,所有要先對score表進行查詢,結果爲每一個subjectid對應一個最高的score。首先,我想到的思路就是:得到相同學科的最高分數,再查詢score表,找到最高分數的記錄,代碼如下:

SELECT * FROM score a WHERE score=(SELECT MAX(score) FROM score WHERE subjectid=a.subjectid)
只要做到這,相信剩下的就沒有什麼難度了,就是簡單的多表查詢了,不多說了,直接上完整的代碼

SELECT st.id,st.name,sj.name,sc.score FROM student st,subjects sj,
	(SELECT * FROM score a WHERE score=(SELECT MAX(score) FROM score WHERE subjectid=a.subjectid)) sc 
WHERE st.id = sc.studentid AND sj.id = sc.subjectid 

每個人的想法不一樣,做法就不一樣,如果大家有更好的解決辦法,歡迎大家留言討論!

快樂學習,快樂編程!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章