MySQL 查询数据库

标签 mysql join aggregate-functions

我有两个表 Student 和 Takes

学生:ID、姓名、部门名称

类(class):ID、类(class) ID、成绩

我需要找到每个学生的 ID 和姓名,以及他们所获得的总学分,但不计算学生获得 F 成绩的位置。

这就是我到目前为止所处的位置,但它是错误的,因为它会获取单个学生的姓名,并将该学生的所有学分加起来。

select student.ID, student.name, count(course_id) AS credits
FROM student, takes
WHERE student.ID = takes.ID and takes.grade != 'F';

results
ID     name   credits
001     stud1   20

最佳答案

要获取每个学生的计数,您需要对学生进行GROUP BY(s.ID, s.name):

SELECT s.ID, s.name, COUNT(*) AS credits
FROM student AS s
INNER JOIN takes AS t ON s.ID = t.ID 
WHERE t.grade != 'F'
GROUP BY s.ID, s.name  

我猜测某些类(class)比其他类(class)可以获得更多学分。因此,如果您有一个字段显示每门类(class)有多少学分,您可能需要链接该表并使用 SUM(CreditVal) 而不是 COUNT(*)。像这样的东西:

SELECT s.ID, s.name, SUM(c.credits) AS TotalCreditsEarned
FROM student AS s
INNER JOIN takes AS t ON s.ID = t.ID 
INNER JOIN course AS c ON c.ID = t.course_id
WHERE t.grade != 'F'
GROUP BY s.ID, s.name

在上面的查询中,只需将 c.ID = t.course_id 更改为将两个表链接在一起的字段即可。

关于MySQL 查询数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21856084/

相关文章:

algorithm - 如何创建 MEME 算法?

mysql - 'file.name' 中的未知列 'where clause'

php - 从 wamp 服务器连接主机上的 mysql 数据库

mysql - SQL - 根据多个条件插入数据

mysql - 如何使用 SQL 查询连接表并获取绑定(bind)列的数量?

SQL '08: How to count all sku' 在一个表中找不到另一个表

mysql - 对 GROUP BY HAVING 的结果求和

SQL Server 连接表语句

python - 根据另一列合并数据框中的行

mysql - 如何对两个不同表的两个不同列的数据求和?