2016-11-19 76 views
0

對於每個學生,找到他們所需的課程數量並按行降序排列 。 (如學生證,由該學生採取 課程的數量)我如何在mysql工作臺中找到這個查詢

STUDENT TABLE 

| ID  | name  | dept_name  | tot_cred | 
| S0901 | Alice  | Comp.Sci.  | 83  | 
| S0902 | Martha | Comp.Sci.  | 75  | 
| S0903 | Micheal | Comp.Sci.  | 45  | 
| S0904 | Rose  | Comp.Sci.  | 77  | 
| S0905 | Alfie  | Comp.Sci.  | 91  | 
| S1901 | Brad  | Biology  | 23  | 

TAKES TABLE 

| ID  | course_id  | sec_id  | semester  | year  | grade  
| S0901 | CS-101   | 1   | Fall   | 2009  | A   
| S0901 | CS-315   | 1   | Spring  | 2010  | B+   
| S0901 | HIS-351  | 1   | Spring  | 2010  | A-   
| S0901 | MTH-101  | 1   | Fall   | 2009  | A   
| S0901 | MTH-102  | 1   | Spring  | 2009  | B+ 
| S0902 | CS-101   | 1   | Fall   | 2009  | A   
| S0902 | CS-315   | 1   | Spring  | 2010  | B+   
| S0902 | CS-319   | 1   | Spring  | 2010  | B   
| S0902 | HIS-351  | 1   | Spring  | 2010  | A-   
| S0902 | MTH-101  | 1   | Fall   | 2009  | A   
| S0902 | MTH-102  | 1   | Spring  | 2009  | B+   
| S1901 | CS-101   | 1   | Fall   | 2009  | B+   
| S1901 | CS-190   | 1   | Spring  | 2009  | C   
| S1901 | CS-315   | 1   | Spring  | 2010  | A-   
| S1901 | HIS-351  | 1   | Spring  | 2010  | A-  
+0

你試過了什麼? – randominstanceOfLivingThing

回答

1

從技術上講,@ Marcinek的答案可能不夠,因爲它忽略了零級學生。我會用這個來代替:

SELECT STUDENT.ID, COUNT(TAKES.ID) 
FROM STUDENT LEFT JOIN TAKES ON STUDENT.ID = TAKES.ID 
GROUP BY STUDENT.ID 
ORDER BY COUNT(TAKES.ID) DESC; 

使用LEFT JOIN,你可以捕捉學生的ID不會出現在TAKES表。

0

剛剛加入和組起來的結果。

SELECT COUNT(*), s.id FROM student s, takes t where t.id = s.id group by s.id order by count(*) desc