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

为何MySQL降序查询未按预期返回结果?

问题原因

你通过FORMAT(MIN(pricelist.price),0)生成的price是字符串类型,并非数字类型。MySQL对字符串排序是按字符逐个比较ASCII值,比如你截图里的"1.000"和"999",第一个字符'1'的ASCII值小于'9',所以"999"会排在"1.000"前面,和数字大小的排序逻辑完全不同,导致结果不符合预期。

修复方案

有两种简单的解决办法:

方案1:基于原始数值排序(推荐)

直接用MIN(pricelist.price)这个数值结果排序,格式化仅用于显示:

SELECT product_list.id AS listId, product.prod_name AS prodName, FORMAT(MIN(pricelist.price),0) AS price 
FROM product_list 
INNER JOIN product ON product_list.id = product.prod_list_id 
INNER JOIN pricelist ON product.id = pricelist.prod_id 
WHERE product_list.id='2' 
GROUP BY listId, prodName 
ORDER BY MIN(pricelist.price) DESC

方案2:把格式化后的字符串转回数字再排序

如果一定要用price别名排序,需要先去除千分位分隔符,再将字符串转为数字类型:

SELECT product_list.id AS listId, product.prod_name AS prodName, FORMAT(MIN(pricelist.price),0) AS price 
FROM product_list 
INNER JOIN product ON product_list.id = product.prod_list_id 
INNER JOIN pricelist ON product.id = pricelist.prod_id 
WHERE product_list.id='2' 
GROUP BY listId, prodName 
ORDER BY CAST(REPLACE(price, '.', '') AS UNSIGNED) DESC

注:如果价格包含小数,建议改用DECIMAL类型转换,比如CAST(REPLACE(price, '.', '') AS DECIMAL(10,2))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 11:15:35