2016-11-19 79 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