代码之家  ›  专栏  ›  技术社区  ›  Sai Kumar

是否按国家/地区从列和组返回最大采购量?

  •  0
  • Sai Kumar  · 技术社区  · 8 年前

    我想按国家分组,找到最大购买量

    SELECT 
        country , 
        customer_name, 
        total_purchased
    FROM total
    GROUP BY 1,2
    ORDER BY 1
    

    输出:

        country       customer_name     total_purchased
       Australia     Diego Gutiérrez      39.6
       Australia      Mark Taylor         81.18
       Austria        Astrid Gruber       69.3
       Belgium        Daan Peeters        60.3899999
       Brazil        Alexandre Rocha      69.3
       Brazil        Eduardo Martins      60.39
    

    我正在寻找一种方法来回报这个国家最好的客户。最好的顾客是指国家里花钱多的人。

    期望输出:

       country       customer_name     total_purchased
       Australia      Mark Taylor         81.18
       Austria        Astrid Gruber       69.3
       Belgium        Daan Peeters        60.3899999
       Brazil        Eduardo Martins      60.39
    
    1 回复  |  直到 8 年前
        1
  •  1
  •   Ary Jazz    8 年前

    我不知道您使用的是哪一个版本的SQL,但是分析功能可以帮助您,尽管在旧的MySQL版本中不可用。 如果您可以使用分析功能,那么类似这样的功能可能会起作用:

    SELECT country, 
        customer_name, 
        total_purchased
    FROM (
    SELECT 
        country, 
        customer_name, 
        total_purchased,
        RANK() OVER (PARTITIONED BY country ORDER BY total_purchased DESC) as rank
    FROM total
    ) a
    WHERE rank = 1
    

    SELECT a.country, 
        a.customer_name, 
        a.total_purchased
    FROM total a
    JOIN (
    SELECT 
        country, 
        MAX(total_purchased) AS max_purchased
    FROM total
    GROUP BY country
    ) b
    ON a.country = b.country
    AND a.total_purchased = b.max_purchased
    

    此查询应具有预期的结果。如果2个客户的总购买价值相同。结果将显示两个客户。