我有这样的疑问:
SELECT type.id, type.name, COUNT(*) AS tot
FROM page
LEFT JOIN type ON page.type=type.id
GROUP BY type.id
但是,这并没有选择所有类型:它忽略了页表中尚未包含的任何类型。我只希望它列出每种类型,并用一个数字表示有多少页具有该类型,包括0,其中不出现该类型。我需要一个不同的加入吗?
最佳答案
改为执行RIGHT JOIN
。试试这个:
SELECT type.id, type.name, COUNT(page.type) AS tot
FROM page
RIGHT JOIN type ON page.type=type.id
GROUP BY type.id
注意不同的计数方式。对于没有
页。当执行
NULL
时,这些行将被忽略[编辑]下面是一个例子。如果我们有以下数据:
类型
身份证名称
1甲
2亿
3摄氏度
第页
身份证类型
11个
2 1个
3 2个
如果我们按照我的答案(no
COUNT
或JOIN
)执行GROUP BY
,我们的结果集将如下所示:type.id type.name page.id page.type类型
1安11
一二一
2 B 3 2
3 C空
现在当我们执行
COUNT
和GROUP BY
时,我们正在计算行数其中type.id不为空。这将是所有行:结果为
B和C各1个。
如果我们改为
COUNT(type.id)
,我们得到A为2,B为1,C为0(因为COUNT(page.type)
对于C!page.type
)关于mysql - 如何使LEFT JOIN与MySQL中的分组/计数一起工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1505271/