Mysql 我依赖多重关系

Mysql 我依赖多重关系,mysql,database,join,count,Mysql,Database,Join,Count,我试图找出如何返回与我加入的表相关的单独表中多个不同项的计数 我对连接很陌生,所以我不确定我是否使用了正确的连接。希望你能帮助我 表格如下所示: SELECT staff_type.*, COUNT(Staff.type_id = staff_type.id) INNER JOIN staff AS Staff ON (staff_type.id = Staff.type_id) staff_类型表 id type 1 doctor 2 nurse

我试图找出如何返回与我加入的表相关的单独表中多个不同项的计数

我对连接很陌生,所以我不确定我是否使用了正确的连接。希望你能帮助我

表格如下所示:

SELECT staff_type.*, COUNT(Staff.type_id = staff_type.id)
INNER JOIN staff AS Staff ON (staff_type.id = Staff.type_id)
staff_类型表

id        type
1         doctor
2         nurse
3         surgeon
职员表

id        type_id        name
1         1              bob
2         1              jane
3         2              phil
4         2              esther
5         3              michael jackson
我试图构造一个语句,它将返回各种不同员工类型的计数,如多少名医生、多少名护士等。我还希望查询从staff_type表中获取数据

关于如何构造此查询,我没有太多想法,但它可能看起来像这样:

SELECT staff_type.*, COUNT(Staff.type_id = staff_type.id)
INNER JOIN staff AS Staff ON (staff_type.id = Staff.type_id)
我知道这和它的本意完全不同,希望你们中的一些人能给我指出正确的方向。关于这个主题的其他帖子对我来说很难理解,而且看起来他们试图做一些稍微不同的事情

谢谢你的帮助

查询将是

select staff_type.*, count(staff.id) as count  from staff_type left join staff on (staff.type_id = staff_type.id) group by staff_type.id

您可以使用以下内容作为示例:

SELECT t.id
     , t.name
     , COUNT(s.id) AS count_staff
  FROM staff_type t
  LEFT
  JOIN staff s
    ON s.type_id = t.id
 GROUP
    BY t.id
     , t.name
要了解这是怎么做的,您可以删除
选择列表中的
分组依据和聚合表达式(
COUNT
)函数,并查看联接操作返回的行

例如:

SELECT t.id      AS `t.id`
     , t.name    AS `t.name`
     , s.id      AS `s.id`
     , s.name    AS `s.name`
     , s.type_id AS `s.type_id`
  FROM staff_type t
  LEFT
  JOIN staff s
    ON s.type_id = t.id
 ORDER
    BY t.id
     , s.id
请注意,
LEFT
关键字表示“外部连接”。这将返回左侧表中的所有行,即使右侧没有任何匹配行。(对于没有任何相关人员的
人员类型
,这将使我们得到一个“零”计数。)

当我们添加
GROUP BY
子句时,表示“折叠”所有在
GROUP BY
列表中表达式或列具有相同值的行

我们可以使用聚合函数,例如
COUNT()
SUM()
MAX()
MIN()
,对折叠成一个组的所有行执行操作

COUNT()。因此,我们使用一个表达式,
COUNT(s.id)
,如果有来自staff的匹配行,我们保证该表达式将为非NULL,如果没有匹配行,则该表达式将为NULL


(我希望这有助于澄清您的一些困惑。)

要查看运行中的“外部联接”,请在
staff\u type
中添加一个新行,该行在
staff
中没有任何对应的行,并且该
staff\u type
的计数应为零。删除
LEFT
关键字,使其成为“内部联接”,并且
staff\u type
不会出现在结果集中。无论哪种方法都可以,这取决于您想要返回的结果。但您给出的示例看起来很像一个案例,用户可能希望看到零计数。。。如果规范是“列出所有员工类型以及每种类型的员工数量”,非常感谢您的帮助,好心的先生,这很有魅力!我对连接之间的差异了解甚少,但您的帖子将帮助我更好地掌握它,再次感谢!