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
不会出现在结果集中。无论哪种方法都可以,这取决于您想要返回的结果。但您给出的示例看起来很像一个案例,用户可能希望看到零计数。。。如果规范是“列出所有员工类型以及每种类型的员工数量”,非常感谢您的帮助,好心的先生,这很有魅力!我对连接之间的差异了解甚少,但您的帖子将帮助我更好地掌握它,再次感谢!