mysql - MySQL如何合并连接表的行数,包括0?

标签 mysql join count null

我有两个表:“公司”和“订单”。第一个包含公司信息,第二个包含与公司发出的所有订单。 (订单.公司 = 公司.ID)。

我正在第一个表上进行查询,例如纽约市的所有公司。我想与 order 表进行联接,以便它立即显示公司的订单数量。我可以用一个简单的 JOIN 查询来做到这一点,但是,它不包括 0。例如,如果一家公司还没有订单,那么它根本不会显示,而它应该在 0 个订单的列表中。

期望的最终结果:

----------------------------------------
|  ID  |     Name    |   ...  | Orders |
----------------------------------------
| 105  |  Company A  |   ...  |   14   |
| 115  |  Company B  |   ...  |    5   |
| 120  |  Company C  |   ...  |    0   |
| 121  |  Company D  |   ...  |    0   |
----------------------------------------

提前致谢!

最佳答案

这是一个带有聚合的左连接:

SELECT c.ID, c.Name, count(o.company) as total
FROM companies c left outer join
     orders o
     on c.id = o.company
WHERE c.city = 'New York'
GROUP BY c.ID;

在 MySQL 中,最好避免在 from 子句中使用子查询(如果可能),因为实际上会创建派生表。

COUNT() 表达式通过计算用于连接的 id 字段中非空值的数量来计算匹配的数量。

关于mysql - MySQL如何合并连接表的行数,包括0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18572857/

相关文章:

Mysql 查询卡在生产数据库服务器上,但在本地工作正常

php - 选择并回显所有表格(无论它是什么)

mysql - SQL 连接多个表

sql - INNER JOIN 用作 CROSS JOIN

python - 分组并计算唯一值的数量( Pandas )

php - CHMOD 目录只能通过服务器上的 ftp 或脚本读取

php - 获取组成员的连接查询,然后在 Laravel 中获取组作为查询

mysql - 选择 id WHERE COUNT(*) > X ? - 如何从表中有超过 X 条记录的任何用户那里获取记录?

python - 计算 python 中的特定字母组而不排除它们

javascript - NodeJS MySQL 如何获取查询函数之外的结果