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

文字列を数値として並べ替える簡単な方法の 1 つ (たとえば、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でこれを見つけることができなかったことに驚いています。解決策は、FORMAT ではなく ROUND を使用することです。すなわち

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 に答える