我有很多棒球运动员。他们参加过许多棒球比赛。我希望找到洋基队的球员,并根据他们的命中率对他们进行排序。它们在 MySqlDatabase 中。
基本结构如下:
[Players]
ID Name Team
1 Jim Yankees
2 Bob Yankees
3 Ted Red Socks
4 Hal Yankees
5 Tom Dodgers
[Games]
ID Player_Id Hits
1 1 2
2 2 0
3 3 3
4 4 1
5 5 2
6 1 0
7 2 0
8 3 1
9 4 4
10 5 1
11 1 0
12 2 0
13 3 1
14 4 3
15 5 1
我正在寻找结果
Hal 8
Jim 2
Bob 0
查询是什么?
最佳答案
以下是我认为更好的解决方案:
SELECT p.Name, sum(Hits) as TotalHits
FROM Players p LEFT OUTER JOIN
Games g
on p.id = g.player_id
WHERE p.Team = 'Yankees'
GROUP BY p.id
ORDER BY TotalHits DESC;
我认为这更好吗?
- 在 MySQL 中,具体化了一个子查询。这会导致不必要的开销。
- 通过不使用物化 View ,MySQL 有更好的机会使用索引进行连接。
LEFT OUTER JOIN
的使用保证所有 Yankees 球员都将被包括在内,即使那些不在Games
表中的球员也是如此。
关于mysql - 根据 mySql 中相关表的总数进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23184135/