【问题标题】:How can I show order quantity relative to cities where customers in cities have at least three orders?我如何显示相对于城市客户至少有三个订单的城市的订单数量?
【发布时间】:2015-02-05 11:28:50
【问题描述】:

我使用此 SQL 语句能够连接三个表(Order1、Order2 和 Customers),以显示每个客户来自他们所针对的每个城市的订单数量。但是,我怎样才能为至少完成三个订单的城市的客户显示订单数量的行呢?换句话说,我正在尝试汇总与完成三个以上订单的客户相关的城市。

表结构:

  • Customers 具有列 CustomerNr, City Name
  • Order1 包含 Ordernr, CustomerNr
  • Order2 具有列 Ordernr, Order quantity

到目前为止的 SQL 语句:

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

【问题讨论】:

  • 如果您能提供一些关于输入和期望结果的示例数据,将会很有帮助。
  • 我想要的结果是显示客户至少下了三个订单的城市的行,我想添加一个名为 AS 'Total quantity' 的列(到输出视图)和他们的订单总数,您可以从表 Order2 中的“订单数量”列中获得。
  • 换句话说:输出应该在两列中:“城市名称”(列出客户至少下了三个订单的城市的行)和“订单数量”,应该是一列您添加 AS 'Order quantity' 以向这些客户显示总订单。并且可以从表“Order2”的“orderquantity”列中获取订单数量。

标签: sql sql-server aggregate


【解决方案1】:

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

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;

这是一个SQL Fiddle,其中包含一些我测试过的虚拟数据。

【讨论】:

    【解决方案2】:
    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
    

    【讨论】:

    • @ecinna 。 . .您的问题是:“为客户显示订单数量行”。这个答案显示了摘要。如果这不能达到您真正想要的效果,您应该问另一个问题。如果是这样,那么您将来应该更清楚您的问题。样本数据和期望的结果总是有帮助的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-15
    • 1970-01-01
    • 1970-01-01
    • 2022-07-20
    • 1970-01-01
    • 2019-08-04
    • 1970-01-01
    相关资源
    最近更新 更多