Sql 如果城市中的客户至少有三个订单,我如何显示相对于城市的订单数量?

Sql 如果城市中的客户至少有三个订单,我如何显示相对于城市的订单数量?,sql,sql-server,aggregate,Sql,Sql Server,Aggregate,我使用此SQL语句可以联接Order1、Order2和Customers三个表,以显示来自每个城市的每个客户的订单数量。但我如何为至少完成了三次订单的城市客户显示订单数量行?换言之,我试图汇总与完成三个以上订单的客户相关的城市 表结构: Customers有CustomerNr列和City Name列 Order1包含Ordernr、CustomerNr列 Order2包含Ordernr、orderquantity列 到目前为止,SQL语句: SELECT Customers.City

我使用此SQL语句可以联接Order1、Order2和Customers三个表,以显示来自每个城市的每个客户的订单数量。但我如何为至少完成了三次订单的城市客户显示订单数量行?换言之,我试图汇总与完成三个以上订单的客户相关的城市

表结构:

Customers有CustomerNr列和City Name列 Order1包含Ordernr、CustomerNr列 Order2包含Ordernr、orderquantity列 到目前为止,SQL语句:

SELECT 
    Customers.CityName, Order2.OrderQuantity
FROM 
    Order1 
INNER JOIN 
    Order2 ON Order1.ordernr = Order2.ordernr 
INNER JOIN 
    Customers ON Customers.CustomerNr = Order1.CustomerNr

您缺少的是聚合函数。要获取列的总和,可以在select语句中使用SUMcolumnName。要获得正确的结果,您还必须按字段分组。在这种情况下,您需要每个客户的金额,因此可以执行以下操作:

SELECT c.customerNumber, c.name, SUM(o2.quantity) AS totalQuantity
FROM customers c
JOIN order1 o1 ON o1.customerNumber = c.customerNumber
JOIN order2 o2 ON o2.orderNumber = o1.orderNumber
GROUP BY c.customerNumber, c.name;
要根据聚合条件进行筛选,需要添加having子句。在这里,您可以要求每个组至少有3行:

SELECT c.customerNumber, c.name, SUM(o2.quantity) AS totalQuantity
FROM customers c
JOIN order1 o1 ON o1.customerNumber = c.customerNumber
JOIN order2 o2 ON o2.orderNumber = o1.orderNumber
GROUP BY c.customerNumber, c.name
HAVING COUNT(*) >= 3;

这是我测试过的一些虚拟数据。

如果您能提供一些关于输入和所需结果的示例数据,那会很有帮助。我想要的结果是显示客户至少下了三次订单的城市的行,我想在输出视图中添加一列,名为“Total quantity”,其订单总数以数字表示,您可以从表Order2中的“Orderquantity”列中获得。换句话说,输出应该分为两列:“City names”列出客户至少下过三次订单的城市行和“Order quantity”,这应该是您添加为“订单数量”的列,以显示这些客户的订单总数。订单数量可以从表“Order2”的orderquantity列中获取。感谢您的帮助!:@埃奇娜。您的问题是:显示客户的订单数量行。这个答案是总结。如果这不符合你真正想要的,你应该问另一个问题。如果是这样的话,你应该在将来更清楚地回答你的问题。样本数据和期望的结果总是有帮助的。
select c.CityName, Sum(o2.OrderQuantity) as Quantity
from   Customers c 
       inner join Order1 o1 on c.CustomerNr = o1.CustomerNr
       inner join Order2 o2 on o1.OrderNr = o2.OrderNr
group by c.CityName
having sum(o2.OrderQuantity) >= 3