SELECT `name` , COUNT(*) AS `count` FROM `t1`, `t2` WHERE `t2`.`id` = `t1`.`id` GROUP BY `t2`.`id`
我想从t1获取名称,在t2中获取id与t1相同的行数。
到目前为止我已经得到了上述内容,但是如果t2中没有匹配的行,它将不会返回任何数据。如果没有行,我希望count
为0(或NULL),并且名称仍然会返回。
编辑:我希望能够按count
降序进行排序。 (或name
ASC)可能吗?
答案 0 :(得分:3)
这应该适合你:
SELECT `t1`.`id` , COUNT(`t2`.`id`) AS `count`
FROM `t1` LEFT JOIN `t2` ON `t1`.`id` = `t2`.`id`
GROUP BY `t1`.`id`
左连接确保你拥有来自t1的所有行,并且COUNT(t2
。id
)使它只计算t2.id不为空的记录(即 - 那些真正存在于t2中的记录)
答案 1 :(得分:1)
此排序按COUNT降序排列,并在同一计数内按name
递增。 t2
中没有行的名称将返回0。
SELECT
`t1`.`name`,
COUNT(`t2`.`id`) AS `count`
FROM
`t1`
LEFT JOIN `t2` ON`t2`.`id` = `t1`.`id`
GROUP BY
`t1`.`name`
ORDER BY
COUNT(`t2`.`id`) DESC,
`t1`.`name`
根据您的需要修改ORDER BY。
答案 2 :(得分:0)
做联盟以获得另一套
SELECT `name` , COUNT(*) AS `count`
FROM `t1`, `t2`
WHERE `t2`.`id` = `t1`.`id`
GROUP BY `t2`.`id`
UNION
Select name, 0 as count
from t1
where NOT EXISTS (select 1 from t2 where `t2`.`id` = `t1`.`id`)