СУММА разных запросов - PullRequest
0 голосов
/ 05 марта 2019

Добрый день всем,

Для проекта моей стажировки я создаю панель управления для игры, в которую мы играем в перерыве.Мы играем в дартс, ФИФА и бильярд.

Например:

SELECT pw.name AS `winner`
     , COUNT(*) AS total 
  FROM billiard_games g 
  JOIN players p1 
    ON p1.id = g.player_1 
  JOIN players p2 
    ON p2.id = g.player_2 
  LEFT 
  JOIN billiard_winners w 
    ON w.id = g.id 
  LEFT 
  JOIN players pw 
    ON pw.id = w.winner 
 GROUP 
    BY winner

Это превосходит следующий результат:

Winner | Total
---------------
Name1 | 5
Name2 | 7

Это означает, что name1 выиграл 5 раз, а name2 выиграл7 раз.Пока все хорошо?

У меня другие запросы к другим играм.На запрос выше, я прошу billiard_games.Другие запросы такие же, но вместо billiard_games я спрашиваю dart_games & fifa_game.

На первой странице приложения я хочу большой обзор.С победителями всех времен.В этой таблице нужно посчитать ВСЕ победы одного игрока.Так что все победы ФИФА, Бильярд и Дартс все вместе.

Я попробовал это:

SELECT
(SELECT pw.name AS `winner`, COUNT(*) AS total FROM billiard_games g INNER JOIN players p1 ON p1.id = g.player_1 INNER JOIN players p2 ON p2.id = g.player_2 LEFT JOIN billiard_winners w ON w.id = g.id LEFT JOIN players pw ON pw.id = w.winner GROUP BY winner)+
(SELECT pw.name AS `winner`, COUNT(*) AS total FROM dart_games g INNER JOIN players p1 ON p1.id = g.player_1 INNER JOIN players p2 ON p2.id = g.player_2 LEFT JOIN dart_winners w ON w.id = g.id LEFT JOIN players pw ON pw.id = w.winner GROUP BY winner)+
(SELECT pw.name AS `winner`, COUNT(*) AS total FROM fifa_games g INNER JOIN players p1 ON p1.id = g.player_1 INNER JOIN players p2 ON p2.id = g.player_2 LEFT JOIN fifa_winners w ON w.id = g.id LEFT JOIN players pw ON pw.id = w.winner GROUP BY winner)
AS SumCount

Это, однако, не работает.Может кто-нибудь мне помочь?Я хочу ВСЕ имена и ВСЕ победы в одном представлении.

Ответы [ 3 ]

0 голосов
/ 05 марта 2019

Вы можете попробовать использовать UNION ALL

select winner, sum(total)
from
(
SELECT pw.name AS `winner`, COUNT(*) AS total 
FROM billiard_games g INNER JOIN players p1 ON p1.id = g.player_1 INNER JOIN players p2 ON p2.id = g.player_2 LEFT JOIN billiard_winners w ON w.id = g.id LEFT JOIN players pw ON pw.id = w.winner GROUP BY winner
union all
SELECT pw.name AS `winner`, COUNT(*) AS total FROM dart_games g INNER JOIN players p1 ON p1.id = g.player_1 INNER JOIN players p2 ON p2.id = g.player_2 LEFT JOIN dart_winners w ON w.id = g.id LEFT JOIN players pw ON pw.id = w.winner 
GROUP BY winner
union all
SELECT pw.name AS `winner`, COUNT(*) AS total FROM fifa_games g INNER JOIN players p1 ON p1.id = g.player_1 INNER JOIN players p2 ON p2.id = g.player_2 LEFT JOIN fifa_winners w ON w.id = g.id LEFT JOIN players pw ON pw.id = w.winner 
GROUP BY winner
) A group by winner
0 голосов
/ 05 марта 2019

Довольно сложное объяснение, однако, чтобы выполнить запрос, удалите + и попробуйте использовать union как Select * from (<your_query_with_+changed_to_union>), чтобы хотя бы запустить его.

0 голосов
/ 05 марта 2019

Пожалуйста, попробуйте это.

SELECT pw.name AS 'winner', COUNT(pw.name) AS total 
FROM billiard_games g 
INNER JOIN players p1 
ON p1.id = g.player_1 
INNER JOIN players p2 
ON p2.id = g.player_2 
LEFT JOIN billiard_winners w 
ON w.id = g.id 
LEFT JOIN players pw ON pw.id = w.winner GROUP BY winner
...