首页 > 解决方案 > 在数据库中的每个团队中查找最年轻的

问题描述

我有一张球员桌和一张球队桌,我正在努力寻找每支球队中最年轻的球员。我能找到最年轻的球员:

SELECT lname, fname, dob, position
FROM players 
WHERE dob = (SELECT MAX(dob) FROM players);

当我尝试包含团队表时,我收到的数据与上面相同,这是总体上最年轻的玩家。我对此很陌生,所以我仍在尝试了解多行子查询。如果我按团队名称排序,我将收到相同的输出。团队表是否还需要另一个 SELECT 语句?如果是这样,我该怎么做?将运算符从 IN 更改为 ALL 或 ANY 也会给我相同的输出。

SELECT lname, fname, dob, position, name
FROM players p JOIN teams t ON p.team_id = t.id
WHERE dob IN (SELECT MAX(dob) FROM players);

如果有帮助,我正在使用 LiveSQL。

标签: sqlsubqueryoperatorsmultiple-columnsclause

解决方案


您甚至不需要球队表来获取球员信息。一个相关的子查询就足够了:

SELECT p.lname, p.fname, p.dob, p.position
FROM players p
WHERE p.dob = (SELECT MAX(p2.dob)
               FROM players p2
               WHERE p2.team_id = p.team_id
              );

如果您愿意,可以引入 aJOIN来获取团队名称:

SELECT p.lname, p.fname, p.dob, p.position, t.name
FROM players p JOIN
     teams t
     ON p.team_id = t.id
WHERE p.dob = (SELECT MAX(p2.dob)
               FROM players p2
               WHERE p2.team_id = p.team_id
              );

推荐阅读