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

如何按group_name分组获取各品类Top10销售商品?

获取每个商品组下的Top10销量商品

要实现每个group_name下取Top10销量商品,核心是用窗口函数对每个商品组内部的商品按销量排序并排名,再筛选排名前10的记录。以下是修改后的查询:

SELECT *
FROM (
    SELECT
        cs.item_no,
        SUM(cs.quantity) AS total_quantity,
        i.item_type,
        i.item_name,
        i.group_name,
        -- 按商品组分隔,对每个组内的商品按销量降序排名
        ROW_NUMBER() OVER (PARTITION BY i.group_name ORDER BY SUM(cs.quantity) DESC) AS rank_in_group
    FROM `sales` cs
    LEFT JOIN (
        SELECT 
            item_no,
            MIN(item_name) AS item_name,
            MIN(item_type) AS item_type,
            MIN(group_name) AS group_name
        FROM `items` 
        WHERE group_name != 'UNKNOWN'
        GROUP BY item_no 
    ) i ON cs.item_no = i.item_no 
    WHERE cs.date BETWEEN '2022-08-21' AND '2022-08-22'
    GROUP BY cs.item_no, i.item_type, i.item_name, i.group_name
) ranked_items
WHERE rank_in_group <= 10
ORDER BY group_name, rank_in_group;

关键修改点说明:

  1. 新增窗口函数:使用ROW_NUMBER() OVER (PARTITION BY i.group_name ORDER BY SUM(cs.quantity) DESC),其中:
    • PARTITION BY i.group_name:将数据按商品组拆分,每个组单独计算排名
    • ORDER BY SUM(cs.quantity) DESC:在每个组内按总销量从高到低排序
  2. 筛选排名:外层查询添加WHERE rank_in_group <= 10,只保留每个组内排名前10的商品
  3. 排序优化:最终结果按group_name和rank_in_group排序,方便查看每个组的Top10顺序

排名函数选择(按需调整):

  • 如果需要并列排名(比如销量相同的商品共享同一排名,下一个商品排名顺延),可以把ROW_NUMBER()换成RANK()
  • 如果需要连续并列排名(销量相同的商品共享同一排名,下一个商品排名连续),可以换成DENSE_RANK()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 09:27:28