СУММА с IF и ELSE - PullRequest
       4

СУММА с IF и ELSE

0 голосов
/ 28 апреля 2020

Мне бы хотелось, чтобы результат команды из таблицы выглядел примерно так:

Матчи

+---------------------------------------------------------------------+
| ID | HomeTeam  | HomeScore |   AwayTeam  | AwayScore |   Referee    |
| 1  |  Miami    |      3    |  Las Vegas  |    0      |  Tom Jones   |
| 2  | Las Vegas |      1    |      LA     |    1      |  Tom Jones   |
| 3  |  Miami    |      2    |   Orlando   |    1      |  Tom Jones   |
| 4  | New York  |      0    |    Miami    |    5      |  Tom Jones   |
| 5  |   LA      |      3    |  New York   |    1      |  Jim Bone    |
| 6  |   LA      |      0    |    Miami    |    2      |  Jim Bone    |
| 7  |  Orlando  |      2    |    Miami    |    3      |  Jim Bone    |
| 8  |   LA      |      1    |  Las Vegas  |    1      |  Jim Bone    |
+---------------------------------------------------------------------+

Не знаю, можете ли вы написать что-то подобное или как вы это делаете в mysql. Но я надеюсь, что вы поняли :)

SELECT HomeTeam, Referee, (IF HomeTeam = 'Miami': SUM(HomeScore) ELSE AwayTeam = 'Miami' SUM(AwayScore)) AS TeamScore
FROM Matches
WHERE (HomeTeam = 'Miami' OR AwayTeam = 'Miami') 
GROUP BY Referee
ORDER BY TeamScore Total

Результат должен быть.

+--------------------------------------+
| HomeTeam  |  Referee   |  TeamScore  | 
|  Miami    | Tom Jones  |     10      |
|  Miami    | Jim Bone   |     5       |
+--------------------------------------+

Ответы [ 2 ]

0 голосов
/ 28 апреля 2020

вы можете использовать IF и CASE в MySQL. Это первое решение с CASE:

SELECT 'Miami', Referee, 
   (SUM(CASE WHEN HomeTeam = 'Miami' THEN HomeScore ELSE 0 END) +
   SUM(CASE WHEN AwayTeam = 'Miami' THEN AwayScore ELSE 0 END)) as TotalScore
FROM Matches
WHERE (HomeTeam = 'Miami' OR AwayTeam = 'Miami') 
GROUP BY Referee

Это второе решение с IF:

SELECT 'Miami', Referee, 
   (SUM(IF (HomeTeam = 'Miami', HomeScore, 0)) +
    SUM(IF (AwayTeam = 'Miami', AwayScore, 0))
    ) as TotalScore
FROM Matches
WHERE (HomeTeam = 'Miami' OR AwayTeam = 'Miami') 
GROUP BY Referee

Оба должны обеспечить результат, ожидаемый в вашем ответе:

Miami   Jim Bone    5
Miami   Tom Jones   10

Надеюсь, это поможет.

0 голосов
/ 28 апреля 2020

Один из способов реализовать это - использовать запрос UNION, чтобы развернуть команды и оценки Home и Away в строки, а затем взять SUM над этой производной таблицей:

SELECT Team, Referee, SUM(TeamScore) AS TeamScore
FROM (
  SELECT HomeTeam AS Team, HomeScore AS TeamScore, Referee
  FROM matches
  UNION ALL
  SELECT AwayTeam, AwayScore, Referee
  FROM matches
) m
WHERE Team = 'Miami'
GROUP BY Team, Referee
ORDER BY TeamScore DESC

Вывод:

Team    Referee     TeamScore
Miami   Tom Jones   10
Miami   Jim Bone    5

Демонстрация на dbfiddle

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...