Mysql 按公式排序无法正常工作

Mysql 按公式排序无法正常工作,mysql,Mysql,我已经搜索了几个小时,试图找出ORDER BY在公式上不能正确工作的原因: SELECT *, FORMAT(LowPriceCompetitor - (-(products.distPrice + 0.30) / ((Rates.rate + 0.02 + Rates.defaultMarkup) - 1)), 2) AS margin FROM products LEFT JOIN Rates ON products.MasterCategoryID = Rates.categ

我已经搜索了几个小时,试图找出ORDER BY在公式上不能正确工作的原因:

SELECT *, 
    FORMAT(LowPriceCompetitor - (-(products.distPrice + 0.30) / ((Rates.rate + 0.02 + Rates.defaultMarkup) - 1)), 2) AS margin 
FROM products 
LEFT JOIN Rates ON products.MasterCategoryID = Rates.categoryID 
ORDER BY margin

如何让MySQL对公式的输出进行正确排序?这应该管用

我很惊讶这么晚才在这里找到这个。解决方案是使用圆形而不是格式。i、 e

SELECT *, 
    ROUND(LowPriceCompetitor - (-(products.distPrice + 0.30) / ((Rates.rate + 0.02 + Rates.defaultMarkup) - 1)), 2) AS margin 
FROM products 
LEFT JOIN Rates ON products.MasterCategoryID = Rates.categoryID 
ORDER BY margin
我应该先用ROUND。FORMAT以字符串形式返回结果。。。
我希望这对其他人有所帮助。

一种将字符串排序为数值的快速方法(例如,
FORMAT()
函数返回的值,或返回字符数据类型的任何其他表达式)

是将零添加到表达式中。MySQL将执行从字符到数字的隐式转换:

SELECT FORMAT(lpc - (-(p.dp + 0.30) / ((r.rate + 0.02 + r.dm) - 1)), 2) AS margin
  FROM t
  JOIN ... 
 ORDER BY margin+0
                ^^---- quick fix here is to add zero

你是怎么做到的?先回答然后问问题?问题和答案的时间完全相同。@vinodadhikary我开始问这个问题,并在这个过程中找到了答案,所以我点击了“回答你自己的问题”按钮。显然是为这种情况而设的。@TimDuncklee,我明白了。我只是很惊讶,以前从未见过。谢谢你回来,它确实有用。ORDER BY按指定的顺序对行进行排序。通过查阅MySQL文档可以发现,
FORMAT
函数返回字符数据类型。ORDER BY正在对字符串进行操作。您需要的是对数值进行排序。将字符数据类型转换为数字的一种快速方法是向其添加零
'123.4'+0