BigQuery按月统计Top20供应商销售额及关联指标查询问题
BigQuery 按月份取Top20供应商统计SQL方案
你原来的写法使用approx_top_sum仅能获取供应商对应的销售额汇总值,无法同时统计折扣总和、商品售出数量两个指标,且该函数返回数组结构未展开,无法输出每个供应商单独行的结果。以下是可直接满足需求的查询语句:
WITH vendor_monthly_agg AS ( -- 按月份+供应商维度聚合,计算单个供应商单月的所有统计指标 SELECT FORMAT_DATETIME('%Y-%m', date) AS month, vendor AS vendor_name_top20, -- 处理item_price的逗号为小数点后转数值求和,若逗号为千分位可修改替换逻辑 SUM(SAFE_CAST(REPLACE(item_price, ',', '.') AS FLOAT64)) AS sum_of_vendor_sales, SUM(discount_price) AS sum_of_vendor_discount, COUNT(1) AS item_count_sold FROM `你的项目.你的数据集.你的表名` -- 替换为实际表路径 GROUP BY month, vendor ), vendor_monthly_rank AS ( -- 对同月份的供应商按销售额降序排名 SELECT *, ROW_NUMBER() OVER(PARTITION BY month ORDER BY sum_of_vendor_sales DESC) AS rk FROM vendor_monthly_agg ) -- 过滤取每个月前20名供应商,按月份、排名排序输出 SELECT month, vendor_name_top20, sum_of_vendor_sales, sum_of_vendor_discount, item_count_sold FROM vendor_monthly_rank WHERE rk <= 20 ORDER BY month, rk;
注意事项
- 你的表只有26万行数据量很小,上述精确计算的方案性能完全足够,不需要使用近似函数
- 若
date字段为DATE类型而非DATETIME类型,将FORMAT_DATETIME替换为FORMAT_DATE即可 - 若item_price中的逗号为千分位分隔符,将REPLACE逻辑修改为
REPLACE(item_price, ',', '')即可
内容的提问来源于stack exchange,提问作者keymeans
相关产品推荐
相关产品推荐

