我一直在寻找数小时试图找出为什么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正确排序公式的输出?这个应工作!
答案 0 :(得分:3)
将字符串排序为数值的一种快捷方法(例如,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
答案 1 :(得分:2)
我很惊讶我在这里找不到这个。解决方案是使用ROUND而不是FORMAT。即。
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将结果作为字符串返回... 我希望这有助于其他人。