sql—查找参加2个或更多课程的学生

gwbalxhn  于 2021-06-17  发布在  Mysql
关注(0)|答案(5)|浏览(368)

我在一次面试中遇到了这个问题,我不太明白。我有三张table:一张学生桌,一张班级桌和一张连接其他两张table的table。这是他们的基本模式。

STUDENT
student_id | student_name
-----------+-------------
int        | varchar(30)

CLASS
class_id | class_name
---------+-----------
int      | varchar(30)

ROSTERS
student_id | class_id
-----------+---------
int        | int

名册表显示哪些学生正在上哪些课。我该如何写一个查询来显示哪些学生正在上两门或更多的课?

1l5u6lss

1l5u6lss1#

此查询将执行您想要的操作:

SELECT s.student_name, COUNT(DISTINCT r.class_id) AS num_classes
FROM student s
LEFT JOIN rosters r ON r.student_id = s.student_id
GROUP BY s.student_id
HAVING num_classes >= 2

它计算了所有不同的 class_id 中的值 roster 每个学生( num_classes )只返回2个或更多的学生( HAVING num_classes >= 2 ).
注意我用了 LEFT JOIN 为了抓住所有的学生,但是,因为你只想要那些超过一个班,这是没有必要的,你可以使用一个直 JOIN .
另外请注意,没有必要 JOIN 这个 class 这个问题的表格,但是如果你想要学生参加的课程的名称,你需要。

jaxagkaj

jaxagkaj2#

你需要加入两个表,学生和名册(我已经使用了内部连接,如果需要,这可以根据需要更改),计算每个学生正在上课的数量。

SELECT s.student_name, 
    COUNT(r.class_id) AS count
FROM 
    STUDENT s
INNER JOIN 
    ROSTERS r 
ON 
    r.student_id = s.student_id
GROUP BY 
    s.student_id
HAVING 
    count >= 2
wsxa1bj1

wsxa1bj13#

SELECT COUNT(class_id), student_id 
FROM Rosters 
GROUP BY student_id 
HAVING COUNT(class_id) >=2

这是最简单的方法。

92dk7w1h

92dk7w1h4#

你可以用 join , count , having 以及 group by 要获得所需的输出:

select r.student_id,s.student_name,count(*) 
from STUDENT s inner join ROSTERS r
on s.student_id = r.student_id
group by r.student_id,s.student_name
having count(*)>=2;
drkbr07n

drkbr07n5#

这将起作用:

select  s.*,r.*,c.*,count(*) 
from 
student s,
class c,
rosters r where
s.student_id=r.student_id and
c.class_id=r.class_id
group by s.student_id 
having count(*)>=2

相关问题