лига таблиц и победитель прямого совпадения

#mysql #sql

#mysql #sql

Вопрос:

У меня есть ряд тегов button.

 SELECT team, COUNT( team ) AS pld,  
  SUM( IF( Pts = 3, 1, 0 ) ) AS W,  
  SUM( IF( Pts = 1, 1, 0 ) ) AS D,  
  SUM( IF( Pts = 0, 1, 0 ) ) AS L,  
  SUM( Pts ) AS Pts,  
  SUM( GF ) AS GF,  
  SUM( GA ) AS GA,  
  SUM( GF ) - SUM( GA ) AS GD  
FROM (  
    SELECT home_team_id AS team,  
      home_goal_number AS GF,  
      away_goal_number AS GA,  
      CASE  
        WHEN home_goal_number > away_goal_number  
          THEN 3  
        WHEN home_goal_number = away_goal_number  
          THEN 1  
      ELSE 0  
      END AS Pts  
    FROM matches  
  UNION ALL 
    SELECT away_team_id AS team,  
      away_goal_number AS GF,  
      home_goal_number AS GA,   
      CASE  
        WHEN away_goal_number > home_goal_number  
          THEN 3  
        WHEN away_goal_number = home_goal_number  
          THEN 1  
        ELSE 0  
        END AS Pts  
      FROM matches  
) AS tab  
GROUP BY team  
ORDER BY Pts DESC
  

Это работает отлично. Есть только одна проблема. Если две команды заканчивают лигу с одинаковыми очками, первый способ устранить двусмысленность — понять, кто выиграет прямой матч.

Как я могу изменить этот запрос, чтобы сделать это?

Комментарии:

1. Что вы делаете, когда прямой матч заканчивается ничьей?

Ответ №1:

Если вы считаете, что единственный способ узнать о ничьей — это подсчитать очки с помощью показанного вами запроса, вы можете увидеть, что добавить информацию о победителе прямого матча в текущий запрос непросто.

Я бы подумал о том, чтобы поместить ваш запрос в ПРЕДСТАВЛЕНИЕ, а затем создать новый запрос, чтобы использовать представление и вычислить общего победителя, где количество очков у двух команд равно.

Как я уже говорил в своем комментарии, что вы делаете, когда прямой матч заканчивается ничьей или когда более двух команд имеют одинаковое количество очков в конце соревнования? Эти случаи возможны, но для них сложно разработать решение.

Альтернативой является использование разницы мячей, но это может потребовать, чтобы ваша лига изменила свои правила 🙂