我想返回按 tcv SUM 的结果降序排列的结果。如果我删除 FORMAT() 函数,这会很好地工作,但是当我将 FORMAT() 函数添加到 SUM 时,它会按第一位数字的顺序返回结果,而不是查看整个数字。
所以它会在 7,456,234.00 之前返回 87,400.00,因为 8 在 7 之后,这显然不是期望的结果。
SELECT
x.user as user, u.name,
FORMAT(SUM(IF(x.stage IN ('Closed Won') AND x.close_date BETWEEN '2018-04-01 00:00:00' AND '2018-04-30', x.amount_base, 0)), 2) as tcv,
FORMAT(SUM(IF(x.stage IN ('Closed Won') AND x.close_date BETWEEN '2018-04-01 00:00:00' AND '2018-04-30', x.mrr_base, 0)), 2) as mrr,
FROM table AS x
LEFT JOIN users u ON x.owner = u.name WHERE x.resign_new = 'New' AND x.owner IN ("Name 1", "Name 2", "Name 3")
GROUP BY x.owner
ORDER BY tcv DESC
我需要适当的格式,因为数字需要使用逗号分隔符进行格式化以提高可读性。
MySQL 错误地返回 ORDER BY 我做错了什么?
最佳答案
sum 函数根据您要聚合的列的数据类型返回小数或 double 。因此,要正确排序,您可以删除排序依据中的格式子句。见下文。
SELECT
x.user as user, u.name,
FORMAT(SUM(IF(x.stage IN ('Closed Won') AND x.close_date BETWEEN '2018-04-01 00:00:00' AND '2018-04-30', x.amount_base, 0)), 2) as tcv,
FORMAT(SUM(IF(x.stage IN ('Closed Won') AND x.close_date BETWEEN '2018-04-01 00:00:00' AND '2018-04-30', x.mrr_base, 0)), 2) as mrr,
FROM table AS x
LEFT JOIN users u ON x.owner = u.name WHERE x.resign_new = 'New' AND x.owner IN ("Name 1", "Name 2", "Name 3")
GROUP BY x.owner
ORDER BY (SUM(IF(x.stage IN ('Closed Won') AND x.close_date BETWEEN '2018-04-01 00:00:00' AND '2018-04-30', x.amount_base, 0))) DESC
关于MySql如何对数字格式后的结果进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49983340/