【问题标题】:Find a list of all suppliers with orders from more than 615 different customers. Should return supplier name and customer count查找来自超过 615 个不同客户的订单的所有供应商列表。应返回供应商名称和客户数量
【发布时间】:2019-09-30 20:43:20
【问题描述】:

表格:

  • 供应商:S_SUPPKEY, S_NAME
  • 客户:C_CUSTKEY、C_NAME
  • 订单:O_ORDERKEY、O_CUSTKEY
  • 订单项:L_ORDERKEY、L_SUPPKEY

Lineitem 表中,有很多列具有相同的ORDERKEY,但来自不同的SUPPKEY。 一个订单中可以有多个供应商。因此,如果您在一个客户的单个订单中拥有 3 个供应商,则该客户将计入其客户计数中的 3 个供应商中的每一个。

SELECT 
    S_NAME,
    (SELECT COUNT(Customer.C_NAME)
     FROM Customer
     JOIN Orders ON Customer.C_CUSTKEY = Orders.O_CUSTKEY
     JOIN Lineitem ON Orders.O_ORDERKEY = Lineitem.L_ORDERKEY
     WHERE Lineitem.L_SUPPKEY = Supplier.S_SUPPKEY
     GROUP BY Lineitem.L_SUPPKEY) AS "customer count"
FROM 
    Supplier
WHERE 
    "customer count" > 615;

这是我提出的查询,但它似乎在计算重复订单,因为一个订单可以有很多项目。我想不出办法来解决这个问题。

请帮忙

【问题讨论】:

    标签: sql sqlite


    【解决方案1】:

    使用COUNT(DISTINCT):

    SELECT s.s_suppkey, s.s_name
    FROM Orders o JOIN
         LineItem li
         ON li.L_ORDERKEY = o.O_ORDERKEY JOIn
         Supplier s
         ON li.L_SUPPKEY = s.S_SUPPKEY
    GROUP BY s.s_suppkey, s.s_name
    HAVING COUNT(DISTINCT o.O_CUSTKEY) > 615;
    

    请注意,您不需要客户表。

    【讨论】:

    • @StevenC。 . .我只能说,鉴于这个问题,这似乎不太可能。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-28
    • 1970-01-01
    • 1970-01-01
    • 2013-11-15
    • 2021-04-20
    • 2010-10-19
    相关资源
    最近更新 更多