我在编写mysql查询时,在格式化输出时,遇到了orderby语句的问题。只要我没有使用format,order by语句就可以很好地工作,但是使用format函数会导致输出混乱(值仍然正确,但顺序不正确)。
以下查询不是原始查询,而是类似的查询:
SELECT name, (sal +(sal*com) - max) AS Diff
FROM x NATURAL JOIN y
WHERE x.val1 > y.val2
ORDER BY Diff DESC;
输出将是正确的,即最高的差异和相关的名称第一,然后第二高,以此类推。
然后我使用以下查询格式化它:
SELECT name, FORMAT((sal +(sal*com) - max), 2) AS Diff
FROM x NATURAL JOIN y
WHERE x.val1 > y.val2
ORDER BY Diff DESC;
这就给出了一个没有顺序的输出。
有人能帮我理解我哪里出了问题,以及我如何纠正这个问题吗?
1条答案
按热度按时间ndasle7k1#
问题是
FORMAT
返回文本,而不是数字,因此您将数字作为文本进行排序,这意味着会出现词典规则。一个选择,虽然可能不是你想要的,是使用ROUND
取而代之的是:如果您需要特定于语言环境的东西,比如货币符号或千位分隔符,请考虑在表示层中处理它们。