我在面试中遇到了这个问题,我不太明白。我有三个表:一个学生表,一个类(class)表和一个链接其他两个的表。这是它们的基本架构。
STUDENT
student_id | student_name
-----------+-------------
int | varchar(30)
CLASS
class_id | class_name
---------+-----------
int | varchar(30)
ROSTERS
student_id | class_id
-----------+---------
int | int
花名册表显示了哪些学生正在上哪些课。如何编写查询以显示哪些学生正在上 2 门或更多类(class)?
最佳答案
此查询将执行您想要的操作:
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
它计算每个学生的 roster
中所有不同的 class_id
值 (num_classes
) 并且只返回具有 2 个或更多 (HAVING num_classes >= 2
).
请注意,我使用了 LEFT JOIN
来捕获所有学生,但是由于您只需要那些拥有超过 1 个类(class)的学生,因此没有必要这样做,您可以直接使用 JOIN
.
另请注意,对于此问题,不必JOIN
class
表,但是如果您想要学生所类的名称,则需要这样做。
关于mysql - SQL——查找参加 2 个或更多类(class)的学生,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53736401/