通过学习Derby SQL解决组问题

通过学习Derby SQL解决组问题,sql,derby,Sql,Derby,我创建这个查询是为了从每一个获胜最多的球队中选出一个投手。我的问题在于,我需要以某种方式对它们进行分组,而在尝试这样做时,我一直存在范围界定问题。W是每个投手获胜的次数。这是我的预分组声明 SELECT (SELECT p1.nameFirst FROM Players p1 Where (one.playerID = p1.playerID)), (SELECT p1.nameLast FROM Players p1 Where (one.playerID = p1.pla

我创建这个查询是为了从每一个获胜最多的球队中选出一个投手。我的问题在于,我需要以某种方式对它们进行分组,而在尝试这样做时,我一直存在范围界定问题。W是每个投手获胜的次数。这是我的预分组声明

SELECT 
    (SELECT p1.nameFirst FROM Players p1 Where (one.playerID = p1.playerID)), 
    (SELECT p1.nameLast FROM Players p1 Where (one.playerID = p1.playerID)), 
    one.W, (SELECT t1.name FROM Teams t1 Where(one.teamID = t1.teamID)) 
 FROM Pitching one
 Where (one.W >= ALL
    (SELECT two.W
    FROM Pitching two
    Where (two.teamID = one.teamID)));
我需要按联盟对元组进行分组,并在联盟内按分区对元组进行分组。球队表中存在联赛(lgID)和分区(divID)。有人能给我指出正确的方向吗?多谢各位

这是当前输出内容的前六行

Zach Britton 11 Baltimore Orioles Mark Buehrle 13 Chicago White Sox Madison Bumgarner 13 San Francisco Giants Jhoulys Chacin 11 Colorado Rockies Bruce Chen 12 Kansas City Royals Kevin Correia 12 Pittsburgh Pirates 扎克·布里顿11巴尔的摩金莺 马克·布勒13号芝加哥白袜队 Madison Bumgarner 13旧金山巨人队 乔利斯·查辛11科罗拉多洛矶山脉 布鲁斯·陈12堪萨斯城皇家队 凯文·科雷亚12匹兹堡海盗
我期望的结果是让这些球队按照联赛(NL/AL)进行排序,在联赛中,让他们按照分区进行排序。

根据您的最新评论。我想这就是你想要的

SELECT
   pl.nameFirst
   , pl.nameLast
   , p.W
   , t.name
FROM
(
    SELECT
        MAX(p1.W) AS W
        , p1.teamId
    FROM
    Pitching p1
    GROUP BY
        p1.teamId
) t1
JOIN
    Pitching p
       ON t1.W = p.W
       AND t1.teamId = p.teamId
JOIN
   Players pl
     ON p.playerID = pl.playerID
JOIN
   Teams t
     ON p.teamID = t.teamID
ORDER BY
   t.lgID
   , t.divID

我同意swasheck的观点,在你的模式中有一些改进的机会。正如斯瓦舍克所说,球队ID应该在球员中。不在投球中。

这可能是结构问题。利用我认为是你的结构,我们可能会缩小范围如下:

 select Players.nameFirst, Players.nameLast, TopPitcher.Winner, 
  Teams.name, League.Name, Division.Name
    from    (select playerID, max(Wins) as Winner
    from (select playerID, teamID, count(W) as Wins
        from Pitching
        group by playerID, teamID ) PitchingWins) TopPitcher       
    join Players 
    on TopPitcher.playerID = Players.playerID 
    join Teams 
    on Teams.teamID = Players.teamID
    join League 
    on Teams.leagueID = League.leagueID
    join Division 
    on League.divisionID = Division.divisionID
    order by League.Name, Division.Name

现在。话虽如此,这仅适用于您给定的结构(使用其他插值)。你的整体结构是错误的,因为我可能会将球员与球队联系起来,而不是将投手与球队联系起来,因为你可能会得到一些关于球队胜利与投手胜利的数据错误。

在你想要的o/p中发布一些示例数据。。。你的问题完全错了……你是否考虑过先就这个问题提供反馈?3个人回答。。。如果你是互动式的,你可能会得到更多的回应。对不起,我是新手。谢谢你的建议。好吧,名字和姓氏来自玩家表。结构非常有缺陷是的,今天很晚。也错过了ONs。谢谢你的回复。这会对他们进行适当的分组,但会产生所有球队的所有投手。我最初的查询只生成每个队获胜最多的投手。我对这一切都是全新的,很抱歉我糟糕的结构。哦,天哪。请您编辑问题以反映这些要求好吗?另外,请您发布更多关于结构的信息好吗?您的原始查询中没有任何内容会让我们相信正在进行计数。在playerId上分组不会导致聚合出现问题吗?因为你没有聚合团队,所以你聚合了玩家。起初我同意你的看法,但我的理解是,他希望每个队都有获胜的投手。。。所以我们两者都需要。