如何用SQL按SKU和Size分组查询对应最低价格的Product_ID
找出每组Sku+Size下价格最低的Product_ID的SQL写法
针对你的需求——从包含Product_ID、Sku、Size、Price字段的产品表中,提取每个Sku+Size组合下价格最低的Product_ID,以下是几种实用的SQL写法:
方法1:窗口函数(推荐,支持多数现代数据库)
适合MySQL 8.0+、PostgreSQL、SQL Server等支持窗口函数的数据库,逻辑清晰且灵活:
SELECT Product_ID, Sku, Size, Price FROM ( SELECT Product_ID, Sku, Size, Price, -- 按Sku+Size分组,每组内按价格升序编号 ROW_NUMBER() OVER (PARTITION BY Sku, Size ORDER BY Price ASC) AS row_rank FROM 你的产品表名 ) AS ranked_data WHERE row_rank = 1;
- 说明:
PARTITION BY Sku, Size将数据按指定组合分组,ORDER BY Price ASC让每组内价格最低的行排在首位,ROW_NUMBER()为每行分配组内编号,取编号为1的行就是目标结果。 - 扩展:如果同一组合下存在多个价格相同的最低价格产品,想要返回所有符合条件的
Product_ID,只需将ROW_NUMBER()替换为RANK()或DENSE_RANK()即可。
方法2:子查询关联(兼容老版本数据库)
适用于不支持窗口函数的老版本数据库(如MySQL 5.x):
SELECT p.Product_ID, p.Sku, p.Size, p.Price FROM 你的产品表名 p INNER JOIN ( -- 先找出每个Sku+Size组合的最低价格 SELECT Sku, Size, MIN(Price) AS min_price FROM 你的产品表名 GROUP BY Sku, Size ) AS group_min_prices ON p.Sku = group_min_prices.Sku AND p.Size = group_min_prices.Size AND p.Price = group_min_prices.min_price;
- 说明:先通过
GROUP BY计算每组的最低价格,再通过关联原表筛选出价格等于该最低值的行,最终得到目标数据。
注意:将上述代码中的你的产品表名替换为你实际使用的表名称即可。
内容的提问来源于stack exchange,提问作者EZ-Ryder
相关产品推荐
相关产品推荐

