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

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

最佳答案

这应该适合你:

SELECT `t1`.`id` , COUNT(`t2`.`id`) AS `count`
FROM `t1` LEFT JOIN `t2` ON `t1`.`id` = `t2`.`id`
GROUP BY `t1`.`id`

Left join 确保您拥有 t1 中的所有行,而 COUNT(t2.id) 使其仅计算 t2.id 不为 null 的记录(即 -那些真正存在于 t2 中的)

关于sql - MySQL 跨表计数(*) 查询帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/268107/

相关文章:

sql - 如何从一个表中选择所有记录,从另一个表中选择一个计算值,并显示所有结果

PHP MySQL 查询数据库和 WHERE 子句

mysql - 通过查询将值从一个表插入到另一个表

python - 使用另一个 WS 作为验证 Flask/Rest/Mysql

mysql - 如何计算JPA查询中的行表

sql - 分区上窗口函数中的 PostgreSQL 错误?

ios - sqlite 加入查询 iPad

jQuery 拖放 : What's the best way to store multiple object positions in database?

mysql - 如何根据下拉框选择自动生成文本字段

python - Django 查询对象的最新版本