mysql - SQL——查找参加 2 个或更多类(class)的学生

标签 mysql sql

我在面试中遇到了这个问题,我不太明白。我有三个表:一个学生表,一个类(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/

相关文章:

php - 函数返回错误响应

php - 即使不访问,单个大表也会减慢数据库的速度吗?

php - 错误的外键约束

sql - Oracle jdbc jar 无法在 maven 插件中下载

sql - 如何替换 Postgres 中的表?

android - 通过 LAN 连接到 mySQL 数据库而不使用网络服务器

php - 使用 PHP 填充 Javascript 饼图

jquery - 两个表中三列的值之间的差异

sql - 如何乘以列并添加结果?

PHP:如何处理 SQL 返回值?