Mysql 从不同的表中选择计数
假设我有两个相关的表:Mysql 从不同的表中选择计数,mysql,group-by,having,Mysql,Group By,Having,假设我有两个相关的表: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 VA
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 |
到目前为止,一切正常,但根据要求,我需要返回一份教师名单,以及有多少课程是这样教的:
| id | name | lastname | courses |
----------------------------------------
| 1 | teacher1 | lastname1 | 2 |
| 2 | teacher2 | lastname2 | 1 |
我找不到任何能够适应这一要求的解决方案。我试过使用MySql中的
拥有
和GROUP BY
子句,但这似乎不符合我的需要。AGROUP 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(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
这应该可以做到:
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
可以使用左联接,将教师表用作左表。它将从教师表中选择所有教师,您可以检索他们的课程id。如果教师没有课程,它仍会返回教师记录,但课程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;
下面是一幅说明不同类型联接的图像
您可以使用左联接,将教师表用作左表。它将从教师表中选择所有教师,您可以检索他们的课程id。如果教师没有课程,它仍会返回教师记录,但课程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;
下面是一幅说明不同类型联接的图像
你能告诉我们这些努力吗?你已经有了一个良好的开端,你能给我们展示一下这些努力吗?你已经有了一个好的开始,你已经向我们展示了,汉克!!我一直在训练,但左路的加入确实很神奇。谢谢!!我一直在训练左路,但左路确实发挥了神奇的作用。