sql - 使用 LEFT JOIN 计数
问题描述
两个名为 Sales.Customers 和 Sales.Orders 的表。
Sales.Customers 与 Sales.Orders 中名为 CustomerID 的列具有外键关系。
要求:返回所有客户的查询。查询还必须返回每个客户下的订单数。
查询一:
SELECT cust.cutomername,
NumberofOrders= COUNT(ord.OrderID)
FROM Sales.Customers Cust
LEFT JOIN
Sales.Orders Ord
ON Cust.CustomerID=Ord.OrderID
GROUP BY
Cust.CutomerName;
但我也在想下面一个,
查询2:
SELECT cust.cutomername,
NumberofOrders= COUNT(Cust.cutomerID)
FROM Sales.Customers Cust
LEFT JOIN
Sales.Orders Ord
ON Cust.CustomerID=Ord.OrderID
GROUP BY
Cust.CutomerName;
您推荐哪一个以及为什么?
解决方案
这个查询:
SELECT c.customername, COUNT(o.OrderID)
FROM Sales.Customers c LEFT JOIN
Sales.Orders o
ON c.CustomerID = o.OrderID
GROUP BY c.CustomerName;
可能返回所有无意义计数的客户——可能0
除了OrderID
碰巧匹配CustomerID
s 的 s。
您可能打算:
SELECT c.customername, COUNT(o.OrderID)
FROM Sales.Customers c LEFT JOIN
Sales.Orders o
ON c.CustomerID = o.CustomerId
GROUP BY c.CustomerName;
在此查询中,计算匹配订单COUNT()
的数量。它可以为没有订单的客户带来价值。0
对于此查询:
SELECT c.customername, COUNT(c.OrderID)
FROM Sales.Customers c LEFT JOIN
Sales.Orders o
ON c.CustomerID = o.CustomerID
GROUP BY c.CustomerName;
COUNT()
正在返回行数。每个客户至少有一行,所以价值永远不会是0
。通常,您需要上一个查询。
推荐阅读
- apache-spark - 如何规范化火花数据框的多列
- laravel - 未能加载外部实体“https://ws.hipay.com/soap/payment-v2?wsdl”
- python - 如何在create()odoo 10中复制字段的值
- javascript - 点击标签a时如何向href url添加参数?
- android - 如何通过 id 更改搜索位置?
- html - 如何在 Booststrap 4 中集中导航选项卡/药丸?
- laravel - 模型不显示数据,但保存数据,Laravel
- jquery - 使用日期选择器控件停止用户在输入中输入日期
- php - 当模型名称存储在变量中时,有什么方法可以通过变量动态访问 laravel 模型?
- java - 发生 JAXBException:无法将类型“mypackage.myclass”编组为元素,因为此上下文不知道它