SQL如何计算两个表之间的关系数并包括零?

标签 sql postgresql group-by relationship

我有一张订单表,以及这些订单中包含的产品表。 (products 表有 order_id,一个引用 orders.id 的外键)。

我想查询每个订单包含的产品数量。但是,如果订单根本不包含任何产品,我也希望包含在结果中。

这意味着一个简单的

SELECT *, COUNT(*) n_products FROM `orders` INNER JOIN `products` on `products.order_id` = `orders.id` GROUP_BY `order_id` 

不起作用,因为没有任何产品的订单消失了。

改为使用 LEFT OUTER JOIN 会添加没有产品信息的行,但是包含 1 个产品的订单和包含 0 个产品的订单之间的区别将丢失。

我在这里错过了什么?

最佳答案

你需要一个左连接在这里,你应该计算产品表中的一些列:

SELECT
    o.*,
    COUNT(p.order_id) AS n_products
FROM orders o
LEFT JOIN products p
    ON p.order_id = o.id
GROUP BY
    o.id;

请注意,我假设 Postgres 允许按 orders.id 分组,然后从该表中选择所有列。否则,除了计数之外,您将只能选择 o.id

关于SQL如何计算两个表之间的关系数并包括零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57803167/

相关文章:

sql - 将两个数据库列连接成一个结果集列

PostgreSQL 递归父/子查询

java - 使用 Hibernate 进行分层数据版本控制的好的数据库设计是什么?

postgresql - 安装 PostGIS 的问题

mysql - SQL选择用户的唯一列表,以及其他数据取决于时间戳

php - 删除时数组到字符串的转换

sql - 将 data.table 更新到 SQL 数据库?

mysql - 如何添加一个字段来计算查询检索到的记录数?为什么我会收到此错误消息?

sql - 查找名称重复次数最多的城市

Python - Pandas - GroupBy 条件字符串加法