2

我一直在寻找几个小时试图弄清楚为什么 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 正确排序公式的输出?这应该工作!

4

2 回答 2

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
于 2013-08-16T02:55:41.307 回答
2

我很惊讶我在 SO 上找不到这个。解决方案是使用 ROUND 而不是 FORMAT。IE

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

于 2013-08-16T02:41:28.037 回答