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

如何在SQL中查询每个产品组的最小尺码产品?

如何查询每个产品组中尺码最小的产品?

嘿,这个需求其实很常见,咱们可以用几种不同的SQL写法来实现,我给你拆解一下:

方法一:用窗口函数(推荐,简洁高效)

这是现代SQL里最常用的方式,逻辑清晰还高效。核心思路是先把产品表和尺码编码表关联,给每个组的产品按尺码大小排个序,然后挑出每个组里排第一的那条记录。

SELECT Group_id, Product_id, Size
FROM (
    SELECT 
        p.Group_id, 
        p.Product_id, 
        p.Size,
        -- 按产品组分隔,每个组内按尺码编码从小到大排序,标记行号
        ROW_NUMBER() OVER (PARTITION BY p.Group_id ORDER BY sc.Size_code ASC) AS rn
    FROM Product p
    -- 关联尺码编码表,拿到每个尺码对应的大小编码
    JOIN Size_Code sc ON p.Size = sc.Size
) ranked
-- 只取每个组里排第一的记录
WHERE rn = 1;

补充说明:

如果同一个产品组里有多个产品的尺码都是最小的(比如Group A有两个s尺码的产品),ROW_NUMBER()只会返回其中一个。要是想把所有符合条件的产品都列出来,把ROW_NUMBER()换成RANK()或者DENSE_RANK()就可以啦。

方法二:用子查询(兼容旧版SQL)

要是你用的数据库不支持窗口函数(比如一些老版本的MySQL),可以用这种子查询的方式:

SELECT p.Group_id, p.Product_id, p.Size
FROM Product p
JOIN Size_Code sc ON p.Size = sc.Size
-- 筛选出当前产品组里尺码编码最小的记录
WHERE sc.Size_code = (
    SELECT MIN(sc_inner.Size_code)
    FROM Product p_inner
    JOIN Size_Code sc_inner ON p_inner.Size = sc_inner.Size
    WHERE p_inner.Group_id = p.Group_id
);

补充说明:

这种写法会返回同一个组里所有尺码最小的产品,只要它们的尺码编码等于组内最小值,都会被列出来。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 13:17:44