You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL查询:按国家分组获取GMV最高的头部供应商

按国家维度获取GMV最高头部供应商的SQL实现

你现有代码已经完成了订单、供应商表关联和按国家+供应商维度的GMV聚合,核心缺省步骤是对聚合结果做分组内排序、取指定排名的记录,另外现有代码存在两处可优化/修正的点:

  • 聚合后GROUP BY已经完成维度去重,额外加的DISTINCT属于冗余逻辑,会增加不必要的计算开销,可以删掉
  • GMV汇总字段别名笔误写成了total_gmw,建议修正为total_gmv避免后续字段引用报错

实现方案(适配你使用的BigQuery引擎)

用窗口函数实现分组排序取Top N是性能最优、写法最简洁的方案,代码如下:

-- 第一步:先算出每个国家下各供应商的总GMV(复用你原有聚合逻辑,修正冗余和笔误)
WITH vendor_country_gmv AS (
  SELECT 
    a.country_name, 
    b.vendor_name, 
    SUM(a.gmv_local) AS total_gmv
  FROM `my-project-67287.order1.order2` a
  JOIN `my-project-67287.vendor1.vendor2` b 
    ON a.vendor_id = b.id 
  GROUP BY a.country_name, b.vendor_name
)
-- 第二步:按国家分区打排名,筛选目标名次的供应商
SELECT 
  country_name,
  vendor_name,
  total_gmv
FROM (
  SELECT
    *,
    -- 同国家范围内按GMV从高到低排序打行号
    ROW_NUMBER() OVER (PARTITION BY country_name ORDER BY total_gmv DESC) AS rank_num
  FROM vendor_country_gmv
)
WHERE rank_num = 1; -- 取每个国家第1名,要取Top3就把条件改成 rank_num <= 3 即可

注意事项

  • 如果需要保留并列排名的场景(比如两个供应商GMV相同同为国家第一,需要同时返回),把窗口函数从ROW_NUMBER()替换为RANK()即可
  • 如果需要取GMV最低的供应商,把窗口函数里的ORDER BY total_gmv DESC改成ORDER BY total_gmv ASC就行

内容的提问来源于stack exchange,提问作者pammy09

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 14:15:31