【问题标题】:SQL query to get a team's opponent's dataSQL查询获取球队对手数据
【发布时间】:2021-01-22 22:47:28
【问题描述】:

大家好,我正在使用 sqllite3,我遇到了一个小问题,我需要一些帮助。

这是我的表 match_summary

matchid inning team runs
001 1 CSK 160
001 2 MI 142
002 1 CSK 130
002 2 RR 128

我编写了一个 sql 查询来获取每支球队在所有比赛中的累积分数。它看起来像这样

选择团队,sum(run) as total_runs 来自 match_summary 按团队分组

team total_runs
CSK 290
MI 142
RR 128

现在我想要另一个表,其中包含类似这样的对手记录

team oponent_runs
CSK 270
MI 160
RR 130

我很困惑,我尝试使用自连接但没有得到预期的结果。 无论如何我可以查询这个还是我必须更改表架构?

谢谢你, 阿米特

【问题讨论】:

  • 我不懂数据模型。 “局”是什么意思?为什么只有两个?一个团队在排上意味着什么?
  • @Gordon Linoff 一局是当一支球队击球时比赛的一个分区。在板球比赛中有两局,例如在第 1 场比赛的第 1 局中,CSK 队正在击球,而在第 2 局比赛中,MI 队正在击球。我希望有一个局 ID,我的工作会更轻松,但这是我在 Kaggle 上找到的原始数据集,我正在尝试对其进行改造。

标签: sql database sqlite


【解决方案1】:

使用自联接和聚合:

SELECT m1.team, SUM(m2.runs) AS oponent_runs 
FROM match_summary m1 INNER JOIN match_summary m2
ON m2.matchid = m1.matchid AND m2.team <> m1.team
GROUP BY m1.team

请参阅demo
结果:

team oponent_runs
CSK 270
MI 160
RR 130

【讨论】:

    【解决方案2】:

    您可以使用子查询:

    select distinct m1.team, (select sum(m2.runs) from match_summary m2 where m2.team != m1.team and m2.matchid in (select m3.matchid from match_summary m3 where m3.team = m1.team)) from match_summary m1;
    

    【讨论】:

      猜你喜欢
      • 2016-09-18
      • 1970-01-01
      • 2018-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-07
      相关资源
      最近更新 更多