Sql 如何计算一个表中属性的每个值在另一个表中出现的次数?如果没有外观,则返回零
如果我有一个属性为CUSTOMER_id的CUSTOMER表和一个ORDER表 使用属性order\u id和customer\u id 如何查找每个客户提交的订单总数,如果客户没有订单,则返回零 我尝试了以下方法: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; 通过上面的内容,我可以显示每个客户的订单数量,只
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;