ORDER BY公式无法正常工作

时间:2013-08-16 02:41:28

标签: 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.categoryID 
ORDER BY margin

如何让MySQL正确排序公式的输出?这个工作!

2 个答案:

答案 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将结果作为字符串返回... 我希望这有助于其他人。