MySQL ORDER BY 聚合列返回不正确的结果

标签 mysql sql sql-order-by

我努力让这个查询能够按 stakes 正确排序 - 它返回的值既不是 desc 也不是 asc。如果我使用 order by,它确实适用于 wins。也许 MySQL 在构建聚合时没有评估排序顺序?

我删除了一些全名,以减少阅读起来的乏味。

SELECT a.b AS  t , COUNT(  c.aID ) AS  r , 
                   COUNT( 
                          CASE WHEN  c.Finish =1
                               THEN 1 
                               ELSE NULL 
                               END )               AS  wins , 
                 CONCAT( FORMAT( (
                                   COUNT( 
                                          CASE WHEN  c.Finish =1
                                               THEN 1 
                                               ELSE NULL 
                                               END ) / COUNT(  c.aID ) ) *100, 0 ) ,  '%'
                       ) AS  Percent , 
                FORMAT( SUM(  c.StakeWon ) , 0 ) AS  stakes 
 FROM c
 INNER JOIN a ON c.aID = a.aID
 INNER JOIN d ON c.dID = d.dID
 WHERE  d.w >= STR_TO_DATE(  '2012,07,01',  '%Y,%m,%d' ) 
 AND  d.w < STR_TO_DATE(  '2012,07,01',  '%Y,%m,%d' ) + INTERVAL 1 
 MONTH 
 GROUP BY  a.b 
 ORDER BY  stakes DESC`

如果我按 Percent 排序,它也不起作用。我不想在这里问这个问题,但这让我发疯。

最佳答案

如果您显示一些结果会有所帮助,但您必须在格式化之前对赌注进行排序。然后您真正对数值而不是格式化字符串进行排序。

这是一个例子 SQL Fiddle怎么会出错。

由于格式原因,数值未降序排列

100
10,000,000
-5,000,005

所以你会做类似的事情

...
     FORMAT( SUM(  c.StakeWon ) , 0 ) AS  stakes ,
     SUM(  c.StakeWon )  AS  stakes_num 
...
     ORDER BY stakes_num desc

工作原理示例:SQL Fiddle

关于MySQL ORDER BY 聚合列返回不正确的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12651782/

相关文章:

mongodb - 按搜索词相似度对结果排序

php - MySQL 和 PHP 性能

mysql - 我有一个具有挑战性的 MySQL SELECT 查询,涉及库存和阈值边界

mysql - 如何优化UPDATE语句?

mysql - 按时间间隔将时间戳分组在一起并计算秒数的差异

android - SQlite 查询顺序

mysql - SQL中的比较二比较

mysql - 根据另一列中的最大值选择列

php - fatal error 说明 "Call to a member function bind_param() on a non-object"

mysql - UNION 查询中的订单字段