MySQL技术问询:先按Price ASC排序,再按Item name分组并字母排序
实现你的MySQL数据处理需求
嘿,针对你要的「先取每个Item name的最低价,再按Item name字母排序」的需求,我给你两种靠谱的实现方案,适配不同的MySQL版本:
方案一:用窗口函数(MySQL 8.0+ 推荐)
窗口函数是最直观的方式,能精准定位每个商品分组里的最低价记录,同时保留所有需要的列:
SELECT item_name, price, model, color, -- 这里可以添加其他你需要的列 FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY item_name ORDER BY price ASC) AS rn FROM your_table_name ) AS temp WHERE rn = 1 ORDER BY item_name ASC;
代码解释:
ROW_NUMBER() OVER (PARTITION BY item_name ORDER BY price ASC):把数据按item_name分组,每个分组内按price升序排序,给每条记录打行号,最低价的那条行号就是1- 外层查询筛选出行号为1的记录,就是每个商品的最低价条目
- 最后
ORDER BY item_name ASC实现按商品名称字母顺序排序
方案二:子查询关联(兼容低版本MySQL)
如果你的MySQL版本低于8.0,不支持窗口函数,可以用子查询先找出每个商品的最低价,再关联原表获取完整记录:
SELECT t1.item_name, t1.price, t1.model, t1.color, -- 其他需要的列 FROM your_table_name t1 JOIN ( SELECT item_name, MIN(price) AS min_price FROM your_table_name GROUP BY item_name ) AS t2 ON t1.item_name = t2.item_name AND t1.price = t2.min_price ORDER BY t1.item_name ASC;
代码解释:
- 子查询
t2先按item_name分组,计算每个商品的最低价min_price - 把原表
t1和子查询t2关联,匹配商品名称和价格,得到每个商品最低价对应的完整记录 - 最后同样用
ORDER BY按商品名称排序
注意点:
- 替换代码里的
your_table_name为你实际的表名 - 如果同一个商品有多个相同的最低价记录(比如同一款商品两个条目价格一样都是最低),方案一会只取其中一条,方案二会返回所有最低价条目,你可以根据需求调整
内容的提问来源于stack exchange,提问作者user3560827
相关产品推荐
相关产品推荐

