【问题标题】:Summary result of two query multiples columns两个查询倍数列的汇总结果
【发布时间】:2021-03-21 00:49:59
【问题描述】:

我有这张桌子:

团队:

--------------
id....teamname....id_league
----------------------------
1.....team1...........2
----------------------------
2.....team2...........2
----------------------------
3.....team3...........2
----------------------------
4.....team4...........2
----------------------------

还有这张桌子: 结果:

----------------------------------------------------
id.....id_home.....id_away.....res_home.....res_away
----------------------------------------------------
1..........1..........2..........0.............4
----------------------------------------------------
2..........3..........4..........1.............2
----------------------------------------------------
3..........3..........2..........3.............4
----------------------------------------------------
4..........4..........1..........1.............2
----------------------------------------------------

我有这个问题:

SELECT
    teams.id,
    teams.teamname,
    SUM(res_home) AS r1,
    SUM(res_away) AS r2
FROM
    results
    INNER JOIN teams ON results.id_home = teams.id
WHERE
    teams.id_league = 2
GROUP BY
    teams.id

结果是:

--------------------------------------------
teamid...teamname........r1...............r2
--------------------------------------------
1.........team1...........0................4
--------------------------------------------
2.........team2...........0................0
--------------------------------------------
3.........team3...........4................6
--------------------------------------------
4.........team4...........1................2
--------------------------------------------

我有这个查询:

SELECT
    teams.id,
    teams.teamname,
    SUM(res_away) AS r1,
    SUM(res_home) AS r2
FROM
    results
    INNER JOIN teams ON results.id_away = teams.id
WHERE
    teams.id_league = 2
GROUP BY
    teams.id

结果是:

--------------------------------------------
teamid...teamname........r1...............r2
--------------------------------------------
1.........team1...........2................1
--------------------------------------------
2.........team2...........4................0
--------------------------------------------
3.........team3...........0................0
--------------------------------------------
4.........team4...........2................1
--------------------------------------------

现在我想合并两者。我想要这个结果:

--------------------------------------------
teamid...teamname........r1...............r2
--------------------------------------------
1.........team1...........2................5
--------------------------------------------
2.........team2...........4................0
--------------------------------------------
3.........team3...........4................6
--------------------------------------------
4.........team4...........3................3
--------------------------------------------

非常感谢。

【问题讨论】:

    标签: mysql sql union-all


    【解决方案1】:

    一种方法是在加入之前取消透视:

    SELECT t.id, t.teamname, SUM(res) AS r1, SUM(opponent) AS r2
    FROM teams t JOIN
         ((SELECT r.id_home as team_id, res_home as res, res_away as opponent
           FROM results r
          ) UNION ALL
          (SELECT r.id_away as team_id, res_away as res, res_home as opponent
           FROM results r
          )
         ) r
         ON r.team_id = t.id 
    WHERE t.id_league = 2
    GROUP BY t.id
    

    【讨论】:

    • 我无法测试它。 phpmyadmin 说你的查询有语法错误..
    • 我只是在第 10 行删除了这部分“ts.id_home = teams.id”并为我工作。非常感谢。
    【解决方案2】:

    另一种方式是两个合并两个连接条件:

    SELECT
        teams.id,
        teams.teamname,
        SUM(case results.id_home when teams.id then res_home else res_away end) AS r1,
        SUM(case results.id_home when teams.id then res_away else res_home end) AS r2
    FROM
        results
        INNER JOIN teams ON teams.id IN (results.id_away,results.id_home)
    WHERE
        teams.id_league = 2
    GROUP BY
        teams.id
        , teams.teamname
    

    【讨论】:

      猜你喜欢
      • 2021-12-08
      • 2023-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-22
      • 1970-01-01
      • 1970-01-01
      • 2012-11-14
      相关资源
      最近更新 更多