我目前正在学校学习SQL(postgresql),但我很难理解看起来像一个简单查询的东西。
练习是在不使用FETCH
或LIMIT
的情况下让数据库中三个最年轻的玩家获得。这就是问题的答案:
SELECT playerid, name, birth_date
FROM players p1
WHERE 2>=
(SELECT count(*)
FROM players p2
WHERE p2.birth_date > p1.birth_date);
这很好但我想知道的是为什么这会让3名最年轻的球员回归?
答案 0 :(得分:1)
您可以使用row_number()窗口函数:
SELECT * FROM (
SELECT playerid, name, birth_date, row_number() over (order by birth_date) rn
FROM players p1
) a WHERE rn <= 3
答案 1 :(得分:1)
where子句的子查询返回birth_date大于主查询返回的行的播放器数。因此,2&gt; =(子查询)仅过滤只有2个或更少年轻玩家的记录。
您可以将子查询放在select子句上以获取它返回的内容。
SELECT playerid, name, birth_date, (SELECT count(*)
FROM players p2
WHERE p2.birth_date > p1.birth_date) youngers_count
FROM players p1
WHERE 2>=
(SELECT count(*)
FROM players p2
WHERE p2.birth_date > p1.birth_date);