我有这样的疑问:

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个
如果我们按照我的答案(noCOUNTJOIN)执行GROUP BY,我们的结果集将如下所示:
type.id type.name page.id page.type类型
1安11
一二一
2 B 3 2
3 C空
现在当我们执行COUNTGROUP 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/

10-11 17:42
查看更多