Select 来自不同表格的 COUNT 个
Select COUNT from different tables
假设我有两个相关表:teacher
和 Course
,这意味着一位教师可以教授多门课程,但一门课程一次只能有一位教师,所以我创建了这两个像这样的表格:
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 |
到目前为止一切正常,但是,根据要求,我需要 return 一份教师名单以及教授的课程数量,例如:
| id | name | lastname | courses |
----------------------------------------
| 1 | teacher1 | lastname1 | 2 |
| 2 | teacher2 | lastname2 | 1 |
我找不到任何可以适应这个要求的解决方案。我尝试使用 MySql 中的 HAVING
和 GROUP BY
子句,但这似乎无法满足我的需要。
A GROUP BY
应该可以正常工作:
SELECT
t.id,
t.name,
t.lastname,
COUNT(DISTINCT course.id) AS courses
FROM teacher AS t
LEFT OUTER JOIN Courses AS c
ON c.teacher_id = t.id
GROUP BY
t.id,
t.name,
t.lastname
这应该可以解决问题:
select t.id, t.name, t.lastname, count(t.id) as courses
from course c
join teacher t on t.id = c.teacher_id
group by t.id
您可以使用老师 table 作为左 table 的左连接。它将 select 来自老师 table 的所有老师,您可以检索他们的课程 ID。如果老师没有课程,它仍然 returns 老师记录,但课程 ID 为空。从那里您可以对课程 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/
假设我有两个相关表:teacher
和 Course
,这意味着一位教师可以教授多门课程,但一门课程一次只能有一位教师,所以我创建了这两个像这样的表格:
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 |
到目前为止一切正常,但是,根据要求,我需要 return 一份教师名单以及教授的课程数量,例如:
| id | name | lastname | courses |
----------------------------------------
| 1 | teacher1 | lastname1 | 2 |
| 2 | teacher2 | lastname2 | 1 |
我找不到任何可以适应这个要求的解决方案。我尝试使用 MySql 中的 HAVING
和 GROUP BY
子句,但这似乎无法满足我的需要。
A GROUP BY
应该可以正常工作:
SELECT
t.id,
t.name,
t.lastname,
COUNT(DISTINCT course.id) AS courses
FROM teacher AS t
LEFT OUTER JOIN Courses AS c
ON c.teacher_id = t.id
GROUP BY
t.id,
t.name,
t.lastname
这应该可以解决问题:
select t.id, t.name, t.lastname, count(t.id) as courses
from course c
join teacher t on t.id = c.teacher_id
group by t.id
您可以使用老师 table 作为左 table 的左连接。它将 select 来自老师 table 的所有老师,您可以检索他们的课程 ID。如果老师没有课程,它仍然 returns 老师记录,但课程 ID 为空。从那里您可以对课程 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/