为了练习我的SQL技能,我正试图创建一个按盗垒年份排列的排行榜。
我希望输出是这样的:
yearID playerID_NL SB playerID_AL SB
2019 1234 37 5678 32
...
为了做到这一点,我有一个精选的声明,可以得到所有的领导者,如下所示:
select
yearID,
playerID,
SB,
lgID
from
(select
yearID,
playerID,
SB,
lgID,
max(SB) OVER (PARTITION BY yearID, lgID) as max_SB
from batting) AS max_sb
where
SB = max_SB.max_SB;
这是有效的,但每个联赛(AL和NL(都有一排;我希望每年有一行的al和nl领导人在单独的列中;
我想把上面的查询别名为sb_leaders
,然后像这样加入,每年有一行:
select
... -- etc.
from
sb_leaders
where
lgID = 'NL'
outer join
(
... -- same thing as above, except lgID = 'AL'
) al
on
sb_leaders.yearID = al.yearID
不管上面的JOIN
是否有点错误(我稍后可以弄清楚是什么错误。(我无法创建允许我从sb_leader
中选择任何内容的别名。这是一个错误,通常像所有SQL错误一样是神秘的。我该如何别名?或者,如果除了alais之外,还有一种方法可以避免深度嵌套查询,那也会有很大帮助。
由于您正在进行实践,以下是如何在sql:中使用别名的一般和基本想法
SQL——c.columnname AS new columnname是什么意思?
您可以尝试使用别名并执行子查询类型的结构。
或者,您可以尝试制作一个临时表,以您喜欢的格式保存值,在运行实际的报告代码之前进行此操作。您可以在sql语句的From区域中使用临时表名,并记住为其创建一个别名
如果你陷入困境,我可以再给你一些提示。