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

SQL Left Join关联两表查询各Band分组下销量最高产品问题

解决方案

首先做通用表结构假设,实际使用时请替换为你自己的表名和对应字段名:

  • 产品分级表:product_banding,核心字段为product_id(产品唯一ID)、band(产品分级标识)
  • 产品销售表:product_sales,核心字段为product_id(产品唯一ID)、sales_volume(产品销量)、price(产品售价),可按需扩展其他字段

方法1:窗口函数写法(适用于MySQL 8.0+/PostgreSQL/Oracle等所有支持窗口函数的数据库,性能最优)

WITH join_data AS (
    -- 关联两张表得到带分级的全量产品销售数据
    SELECT 
        pb.band,
        pb.product_id,
        ps.sales_volume,
        ps.price
        -- 按需补充其他需要返回的字段
    FROM product_banding pb
    LEFT JOIN product_sales ps 
        ON pb.product_id = ps.product_id
),
rank_data AS (
    -- 按分级分组,组内按销量降序排序打排名标签
    SELECT 
        *,
        RANK() OVER (PARTITION BY band ORDER BY sales_volume DESC) AS sales_rank
    FROM join_data
    -- 如果需要排除无销量的产品,可加过滤条件:WHERE sales_volume IS NOT NULL
)
-- 取每个分级内排名第一的产品
SELECT * 
FROM rank_data 
WHERE sales_rank = 1;

逻辑说明:如果同一个分级下有多个产品销量并列第一,RANK()会返回所有并列结果;如果只需要任意一个,将RANK()替换为ROW_NUMBER()即可。


方法2:子查询写法(兼容不支持窗口函数的低版本数据库,如MySQL 5.x)

SELECT 
    pb.band,
    pb.product_id,
    ps.sales_volume,
    ps.price
FROM product_banding pb
LEFT JOIN product_sales ps 
    ON pb.product_id = ps.product_id
-- 关联子查询获取每个分级的最高销量值
INNER JOIN (
    SELECT 
        pb_inner.band,
        MAX(IFNULL(ps_inner.sales_volume,0)) AS max_sales
    FROM product_banding pb_inner
    LEFT JOIN product_sales ps_inner 
        ON pb_inner.product_id = ps_inner.product_id
    GROUP BY pb_inner.band
) t ON pb.band = t.band AND IFNULL(ps.sales_volume,0) = t.max_sales;

注意:该写法同样会返回同分级下所有并列销量最高的产品,如需去重可自行添加DISTINCT或其他过滤逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 01:06:00