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

如何修改SQL查询实现每年仅返回1条年度销量最高手机记录

每年返回销量最高手机机型的SQL实现方案

你可以通过窗口函数对数据按年份分区排序,再筛选每个分区排名第一的记录即可实现需求,不需要改动你原有查询的核心筛选逻辑。

可直接运行的修改后代码

SELECT manufacturer, model, year, units_sold_m
FROM (
  SELECT
    manufacturer,
    model,
    year,
    units_sold_m,
    ROW_NUMBER() OVER (
      PARTITION BY year 
      ORDER BY units_sold_m DESC
    ) AS sales_rank
  FROM `quick-catcher-350001.Phone_Sales.Phone`
  WHERE smartphone = TRUE
)
WHERE sales_rank = 1
ORDER BY year DESC

逻辑说明

  • 内层查询保留了你原有的筛选智能手机的条件,新增了窗口函数ROW_NUMBER():以year为分区维度,同一年份内的机型按销量units_sold_m从高到低排序生成排名,当年销量最高的机型排名值为1
  • 外层查询仅筛选排名为1的记录,即可保证每个年份仅返回1条销量最高的机型结果
  • 最终按年份倒序排列,方便按时间从近到远查看结果

特殊场景处理

如果存在同一年两款机型销量完全相同的情况,基础写法会随机返回其中一条。如果需要保证结果稳定,可以在窗口函数的排序规则中增加次级排序字段,比如按机型名、厂商名排序:

ROW_NUMBER() OVER (
  PARTITION BY year 
  ORDER BY units_sold_m DESC, model, manufacturer
) AS sales_rank

如果需要把当年销量并列第一的机型全部返回,可以将ROW_NUMBER()替换为RANK(),但这种写法可能出现单年返回多条记录的情况,不符合每年仅返回1条的要求时不建议使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 04:33:25