我正在编写MySQL查询,并且在格式化输出时,遇到了order by语句的问题。只要我不使用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;
这给出了没有顺序的输出。
有人可以帮我了解我要去哪里哪里以及如何解决该问题?
最佳答案
问题是FORMAT
返回文本,而不是数字,因此您将数字排序为文本,这意味着将发生词典顺序。一种选择(虽然可能不完全是您想要的),而不是使用ROUND
:
SELECT name, ROUND(sal +(sal*com) - max, 2) AS Diff
FROM x
INNER JOIN y
ON x.val1 > y.val2
ORDER BY Diff DESC;
如果需要特定于语言环境的内容,例如货币符号或千位分隔符,请考虑在表示层中进行处理。
关于mysql - 格式(X,D)在MySQL中影响顺序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49973369/