MySQL查询:按Material与Data分组获取商品最低价格
解决方案:按Material+Data组合查询最低价格
刚好我之前也处理过类似的多列分组求最值的需求,给你两个可行的单条SQL方案,都不需要后续处理:
方法一:基础分组聚合(兼容所有MySQL版本)
这是最直接的方式,利用GROUP BY将相同material和data的商品组合分组,再用MIN()函数提取每组的最低价格:
SELECT material, data, MIN(price) AS price FROM your_table_name GROUP BY material, data;
这个查询会直接返回你需要的结果:每个商品组合对应最低价格的条目,完全匹配你给出的示例输出。
方法二:窗口函数(MySQL 8.0+适用)
如果你的MySQL版本是8.0及以上,推荐用窗口函数,它的优势是如果后续需要保留原表的其他字段(比如商品上架者ID、上架时间等),可以轻松获取对应最低价格的完整行数据:
SELECT material, data, price FROM ( SELECT material, data, price, -- 按商品组合分组,按价格升序排序,给每行标序号 ROW_NUMBER() OVER (PARTITION BY material, data ORDER BY price ASC) AS rn FROM your_table_name ) AS subquery -- 筛选每个组合中序号为1的行(即价格最低的行) WHERE rn = 1;
- 如果同一个商品组合有多个相同的最低价格,
ROW_NUMBER()只会返回其中一行;如果想保留所有最低价的行,可以把ROW_NUMBER()换成RANK()或者DENSE_RANK()。
关于LEAST关键字的说明
你提到的LEAST并不适合这个场景,它的作用是取单个行内多个字段或多个值中的最小值(比如LEAST(price, discount_price)),而无法对分组后的数据集进行聚合计算,所以不满足你按商品组合求最低价格的需求。
内容的提问来源于stack exchange,提问作者Luiz Rodrigo
相关产品推荐
相关产品推荐

