我努力让这个查询能够按 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/