MySQL跨表计数(*)查询帮助

时间:2008-11-06 09:46:29

标签: sql mysql

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)可能吗?

3 个答案:

答案 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(t2id)使它只计算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`)