【发布时间】:2014-11-10 17:43:38
【问题描述】:
我们的足球队有每场比赛的“最佳球员”投票结果。 现在我想要以金、银、铜为背景的 TOP 3 投票(或 TOP 4..5,当票数相等时)。 我更喜欢使用 SQL 查询而不是 php 代码来定义奖牌。
我的网站查询现在返回:
Game - Player - Points
Arsenal - Bart - 25
Arsenal - Joris - 17
Arsenal - Tim - 16
Arsenal - Tom - 16
Arsenal - Victor - 7
Arsenal - Jo - 1
Chelsea - Tim - 15
Chelsea - Bart - 15
Chelsea - Tom - 13
Chelsea - Ken - 10
Chelsea - Victor - 7
Chelsea - Edris - 1
我无法得到这个结果:
Game - Player - Points - Rank
Arsenal - Bart - 25 - 1
Arsenal - Joris - 17 - 2
Arsenal - Tim - 16 - 3
Arsenal - Tom - 16 - 3
Arsenal - Victor - 7 - 4
Arsenal - Jo - 1 - 5
Chelsea - Tim - 15 - 1
Chelsea - Bart - 15 - 1
Chelsea - Tom - 13 - 2
Chelsea - Ken - 10 - 3
Chelsea - Victor - 7 - 4
Chelsea - Edris - 1 - 5
这样会更好(会很完美,但我想会更难)
Game - Player - Points - Rank
Arsenal - Bart - 25 - 1
Arsenal - Joris - 17 - 2
Arsenal - Tim - 16 - 3
Arsenal - Tom - 16 - 3
Arsenal - Victor - 7 - 5
Arsenal - Jo - 1 - 6
Chelsea - Tim - 15 - 1
Chelsea - Bart - 15 - 1
Chelsea - Tom - 13 - 3
Chelsea - Ken - 10 - 4
Chelsea - Victor - 7 - 5
Chelsea - Edris - 1 - 6
有什么建议吗? 就是 tbl_MOTM (Id, Game, Player, Points)
【问题讨论】:
-
这在 MySQL 中并不像在其他 dbms 中那么容易,因为缺少分析功能。为什么你还需要这个?你不使用编程语言来显示结果吗? Java,PHP,什么?然后用它为第一行着色。在我看来,不需要排名数字。
-
这是一个“top n per group”问题,在mysql中不容易做到。
-
我习惯使用 Microsoft MSSQL 和视图/存储过程。我需要排名,所以我可以创建一个 tbl_RankColorCode 来定义 php 网站中记录的背景。但是在 Mysql 中这似乎很难,所以我想我确实需要编写 php 循环来在那里定义 Rankcolors。但我会先尝试下面的解决方案。谢谢。
标签: mysql greatest-n-per-group partition row-number