Sql 如何计算一个表中属性的每个值在另一个表中出现的次数?如果没有外观,则返回零

Sql 如何计算一个表中属性的每个值在另一个表中出现的次数?如果没有外观,则返回零,sql,Sql,如果我有一个属性为CUSTOMER_id的CUSTOMER表和一个ORDER表 使用属性order\u id和customer\u id 如何查找每个客户提交的订单总数,如果客户没有订单,则返回零 我尝试了以下方法: SELECT c.customer_id, COUNT(*) FROM Customer c, Orders o WHERE c.customer_id= o.customer_id GROUP BY c.customer_id; 通过上面的内容,我可以显示每个客户的订单数量,只

如果我有一个属性为CUSTOMER_id的CUSTOMER表和一个ORDER表 使用属性order\u id和customer\u id

如何查找每个客户提交的订单总数,如果客户没有订单,则返回零

我尝试了以下方法:

SELECT c.customer_id, COUNT(*)
FROM Customer c, Orders o
WHERE c.customer_id= o.customer_id
GROUP BY c.customer_id;
通过上面的内容,我可以显示每个客户的订单数量,只要他们下了订单

如何为未下任何订单的客户显示计数0?

尝试IFNULL函数: 希望能有帮助

您可以使用左连接,并在计数位置输入o.customer\u id

演示与样本数据。这里,客户Id 2和4在Orders表中没有任何数据,输出结果为零

DECLARE @Customer TABLE (CustomerId INT);

INSERT INTO @Customer (CustomerId) VALUES (1), (2), (3), (4), (5);

DECLARE @Orders TABLE (CustomerId INT, OrderId INT);

INSERT INTO @Orders (CustomerId, OrderId) VALUES (1, 1), (1, 2), (3, 2), (3, 4), (5, 1);

SELECT c.CustomerId, COUNT(o.CustomerId) AS OrderCount
FROM @Customer c
LEFT JOIN @Orders o ON c.CustomerId = o.CustomerId
GROUP BY c.CustomerId;
输出:

CustomerId  OrderCount
----------------------
1           2
2           0
3           2
4           0
5           1

使用外部联接并计算外部表中的行数:

SELECT c.customer_id, COUNT(o.customer_id)
FROM Customer c 
  LEFT JOIN Orders o ON c.customer_id= o.customer_id
GROUP BY c.customer_id;

首先按客户ID汇总订单,并计算内部select中的总数量。确保将此加入到您的客户表中,这样您就不会失去任何尚未下订单的客户。最后,使用case语句确定客户订单数量的返回值是否为null,这意味着他们没有订单,在这种情况下,将该值设置为零

选择 c、 客户识别码, 案例 当o.num_orders为空时,则为0 其他订单数量 终止 来自客户c 左连接 选择客户标识,将*计为订单数量 从命令 按客户id分组 c.customer\u id=o.customer\u id上的o;
未测试:您可以使用客户的左联接,该联接应列出所有客户,然后只要orders表中的计数为空,您就可以显示0。
SELECT c.customer_id, COUNT(o.customer_id)
FROM Customer c 
  LEFT JOIN Orders o ON c.customer_id= o.customer_id
GROUP BY c.customer_id;