两个查询倍数列的汇总结果
Summary result of two query multiples columns
我有这个table:
团队:
--------------
id....teamname....id_league
----------------------------
1.....team1...........2
----------------------------
2.....team2...........2
----------------------------
3.....team3...........2
----------------------------
4.....team4...........2
----------------------------
和这个 table:
结果:
----------------------------------------------------
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
--------------------------------------------
非常感谢。
一种方法是在加入之前取消旋转:
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
另一种方式是两个合并两个连接条件:
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
我有这个table:
团队:
--------------
id....teamname....id_league
----------------------------
1.....team1...........2
----------------------------
2.....team2...........2
----------------------------
3.....team3...........2
----------------------------
4.....team4...........2
----------------------------
和这个 table: 结果:
----------------------------------------------------
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
--------------------------------------------
非常感谢。
一种方法是在加入之前取消旋转:
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
另一种方式是两个合并两个连接条件:
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