mysql - 从不同的表中选择 COUNT

标签 mysql group-by having

假设我有两个相关表:teacherCourse 这意味着一个 Teacher 可以教授许多类(class),但是一个 Course 一次只能有一个 Teacher,所以,我这样创建这两个表:

create table teacher (
   id INT NOT NULL UNIQUE,
   name VARCHAR(50) NOT NULL,
   lastname VARCHAR(50) NOT NULL
);

create table Course (
   id INT NOT NULL UNIQUE,
   name VARCHAR(50) NOT NULL,
   teacher_id INT NOT NULL
);

所以,例如,我有这样的东西

| id | name     | lastname  | 
-----------------------------
| 1  | teacher1 | lastname1 |
| 2  | teacher2 | lastname2 |

| id | name     | teacher_id |
------------------------------
| 1  | course1  | 1          |
| 2  | course2  | 1          |
| 3  | course4  | 2          |

到目前为止一切正常,但根据要求,我需要返回一份教师名单以及教授的类(class)数量,例如:

| id | name     | lastname   | courses  |
----------------------------------------
| 1  | teacher1 | lastname1  |  2       |
| 2  | teacher2 | lastname2  |  1       |

我找不到任何可以适应这个要求的解决方案。我尝试使用 MySql 中的 HAVINGGROUP BY 子句,但这似乎无法满足我的需要。

最佳答案

您可以使用 teacher 表作为左表来使用左连接。它将从教师表中选择所有教师,您可以检索他们的类(class) ID。如果教师没有类(class),它仍会返回教师记录,但类(class) ID 为空。从那里您可以对类(class) ID 进行不同的计数。见下文:

select a.id,
a.name,
a.lastname,
count(distinct b.id) as courses
from teacher a
left join courses b on a.id=b.teacher_id
group by a.id,
a.name,
a.last_name;

这是一张说明不同类型连接的图片 https://www.google.fr/amp/s/amp.reddit.com/r/programming/comments/1xlqeu/sql_joins_explained_xpost_rsql/

关于mysql - 从不同的表中选择 COUNT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53824388/

相关文章:

java - JpaRepository 查找或创建用户角色返回 null 并给出错误

mysql - HAVING MIN() 组合返回与 HAVING MAX() 相同的结果

oracle - 在 "having"子句中从 Postgres 中的 Oracle 转换 rownum

Mysql 计算每个值的频率并按另一个值分组(二维表)

python - 按年份分组删除一些变量

mysql - SQL 对每个 userID 记录计算一个值,但 userId 的一个记录值为 x 的情况除外

mysql - 为什么 SQL HAVING 条件中的 COUNT 没有计算出正确的值?

java - MYSQL适合桌面应用吗

mysql - 如何从终端恢复mysql数据库备份?

php - mysql_fetch_assoc() 的结果将旧值复合到新值上。有任何想法吗?