MYSQL 平局处理未返回正确的结果

标签 mysql sum tie

我正在使用 MYSQL,并尝试在 MYSQL 的能力范围内进行关系排名。

我的查询是:

    SELECT petz.s_name,
       petz.breed,
       a.num,
       sum(a.rank) AS rank
FROM wins_conf a
JOIN
  (SELECT DISTINCT rank
   FROM wins_conf
   ORDER BY rank DESC LIMIT 10) b ON a.rank = b.rank
JOIN petz ON a.num=petz.num
GROUP BY petz.num
ORDER BY petz.breed,
         rank DESC

返回结果:

                                                                  sum(Rank)
INSANITY'S ACE OF SPADES           Collie          1026           58
INSANITY'S SAVE ME                 Collie          1000           31
STAR GAZER'S BEAUTIFUL LIES        Collie          1039           24
BANYON'S ALL IS FORGIVEN           Collie          1009           19
FELIXTOWE CHERRY BLOSSOM           Collie          1214           18
KE'S PRICELESS FIGUREINE           Collie          1004           13
NOVABLUE'S LOVES UNENDING LEGACY   Collie          1211           12
STAR GAZER'S WARRIOR OF MY HEART   Collie          1059            9
INSANITY'S BE MINE                 Collie          1028            9
STAR GAZER'S A WILDCAT'S REVENGE   Collie          1040            5
KE'S TRICKS OF THE TRADE           Collie          1005            5

记录 1059(STAR GAZER'S WARRIOR OF MY HEART)返回 9 作为排名,但根据数据库中正在 sum() 的记录,它应该是 12

                                                       Rank
conf    33    13    1059    Best of Breed    0    0    5    0   2
conf    78    3139  1059    Best of Breed    0    0    4    0   2
conf    82    2518  1059    Best of Breed    0    0    1    0   2
conf    81    13    1059    Best in Specialty0    0    1    0   2
conf    79    13    1059    Best of Breed    0    0    1    0   2

经过一些调查,我发现如果 1 大于或等于 4,它只会看到排名列的 sum() 的最后 3 条记录

关于如何纠正这个问题有什么建议吗?

<小时/>

编辑/更新回复 AgRizzo 我刚刚删除了全名和品种以便于阅读,这就是我想要的,按排名排序。我想显示排名,其中有重复项,但只有 10 个(包括它们的重复项)。

     num          rank
1    1026         58
2    1000         31
3    1039         24
4    1009         19
4    1214         19
5    1004         13
6    1211         12
6    1059         12
7    1028          9
8    1005          5
8    1040          5
9    1010          3
10    1276          1
<小时/>

我在这里设置了一些基本数据:http://sqlfiddle.com/#!2/7e2992 如上所示,它缺少一些无用的内容,但排名中不需要这些内容。

最佳答案

试试这个

   select petz.s_name, petz.breed, a.num, sum(a.rank) as rank
   from wins_conf a
   JOIN petz ON a.num=petz.num 
   GROUP BY petz.num 
   ORDER BY petz.breed, rank DESC LIMIT 10

关于MYSQL 平局处理未返回正确的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19279076/

相关文章:

sql - 如何计算小时数总和?

python - 在 Pandas 的单元格中添加值

mysql - 如何显示一年中的所有月份,无论MySQL中每月是否有数据

perl - 如何观察特定的哈希键来改变它的值?

perl - 如何防止 perl 读取超出访问时缩小的绑定(bind)数组的末尾?

mysql - 在选择列规范中使用 CASE 通过别名引用聚合结果

mysql - 为文本类型列创建索引

mysql - 在哪里可以找到 mysql 启动变量的设置位置?

mysql - Android 2.1设备到远程mysql数据库连接

perl - 延迟 Perl 中范围更改的代码