mysql - 根据 mySql 中相关表的总数进行排序

标签 mysql

我有很多棒球运动员。他们参加过许多棒球比赛。我希望找到洋基队的球员,并根据他们的命中率对他们进行排序。它们在 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/

相关文章:

php - 如何使用 php、html 为从 mysql 检索数据字段创建链接?

php - 数据库中的查询获取

php - 为什么 JS 警报会杀死我的注册表单?

mysql - rubyonrails mysql2

php - 如何访问从 codeigniter 中的查询传递的数据

php - 我正在尝试将值插入 MySQL 数据库,但错误指出重复条目

sql - 需要帮助编写查询

mysql - 表 'session_variables' 的命令被拒绝

java - Hibernate JPA,在同一事务中删除和添加

mysql - SIGTERM + Rails + mysql?