gpt4 book ai didi

SQL 查询 - 可能需要分析函数

转载 作者:行者123 更新时间:2023-12-04 20:59:15 24 4
gpt4 key购买 nike

我昨天问了一个类似的问题,回答正确。 SQL requiring self join and ranking虽然这个问题很相似,但我无法调整答案以适应。

我有一张足球成绩表:

    CREATE TABLE matches(
season NUMBER(4),
matchDate DATE,
homeTeam VARCHAR2(25),
awayTeam VARCHAR2(25),
homeGoals NUMBER(2),
awayGoals NUMBER(2),
totalGoals NUMBER(3));

可以在此处找到 INSERT 语句:https://gist.github.com/2941229

我希望按如下方式计算 totalGoals 的值。它是当前主队最近5场比赛的总进球数(主场进球+客场进球)加上当前客队在本场比赛前最近5场比赛的进球数。它不能包括当前比赛的进球。

与昨天的问题不同的是,它只统计了以往主队在主场和客队在客场的比赛。有了这个问题,主队之前是主场还是客场都无所谓了。他们只需要是上一场比赛的球队之一。

和以前一样,只应使用当前赛季的比赛,如果任何一支球队本赛季未打过 5 场比赛,则 totalGoals 应保持为 NULL。

我可以使用 PL/SQL 执行此操作,但我更喜欢 SQL 查询。昨天的解决方案比我的 PL/SQL 快一千倍。

谢谢谭

最佳答案

本质上,您需要能够在主队/客队计算中引入某种“或”,但您不能在分析函数中这样做(据我所知)。看起来您需要创建一个中间表(它只在查询期间存在,所以我猜更多的是 View ),它有一个带有任一团队名称的附加计算列。您可以使用 unpivot为此,您丢失了可能仍然需要的原始列。因此,您可以退回到 11g 之前的 psuedo-unpivot,例如:

select season, matchdate, hometeam, awayteam, homegoals, awaygoals,
case when rn = 1 then hometeam else awayteam end as anyteam
from matches
cross join (select level as rn from dual connect by level <= 2)

这将为您原始表格中的每一行提供两行。您应该能够将其用作(另一个)子查询来代替昨天答案中的 matches,对分析子句进行一些调整,并删除重复项。

关于SQL 查询 - 可能需要分析函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11069886/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com