MySql如何对数字格式后的结果进行排序?

标签 mysql sql sql-order-by

我想返回按 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/

相关文章:

php - MySQL查看列名大小写

mysql - SQL:如何根据两个不同的条件对相同的值求和

mysql - 优化MySql查询: Too slow when ordering

MYSQL 限制左连接查询

sql - 为什么在sql语句中使用COALESCE()?

SQL - 如何在一个查询中对不同列进行排序

sql - MYSQL多表join前N行

PHPExcel错误: Undefined index

php - 警告 : mysql_real_escape_string() expects parameter 1 to be string, 资源中给出

sql - 运算符不存在 : interval > integer