您好我有以下查询:
Player.select("Players.*, (SELECT COUNT(*) FROM Results WHERE Results.player_id = Players.id and win = true and competition_id = 4) as wins").where("competition_id = 4").order("wins desc")
本质上,它是根据结果表中的外键出现来计算和排序玩家记录,其中对于特定比赛,胜利设置为真。为了让您更好地了解结果表中的一些示例数据可能是...
Player_ID | Match_ID|Win|Elapsed_Time|etc..
1 | 1 |T | 1:00 |etc..
2 | 1 |F | 1:00 |etc..
1 | 2 |T | 3:00 |etc..
3 | 2 |F | 3:00 |etc..
如您所见,此语句中发生了两个选择,我认为这可能会在未来导致性能下降。玩家实际上与结果有一对多的关系,你可以猜到,但我无法弄清楚如何使用我认为可能更有效的连接来完成这项工作。
也许我错了,上述查询没有任何问题 - 无论哪种情况,请提供一些建议。
我正在使用 PostgreSQL 数据库。