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),并且仍然返回名称。
编辑: em>我希望能够按计数
降序排序。(或名称
ASC),这可能吗?
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),并且仍然返回名称。
编辑: em>我希望能够按计数
降序排序。(或名称
ASC),这可能吗?
这对你应该有效:
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 不为 null(也就是那些实际存在于 t2 中的记录)时才进行计数。
这按COUNT降序排列,对于相同的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。
进行联合以获取另一个集合。
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`)