SELECT
    team_id                                             team_id,
    t.name                                              team_name,
    t.country                                           country,
    count(*)                                            matches,
    SUM(scored)                                         scored_total,
    SUM(conceided)                                      conceided_total,
    count(CASE WHEN scored > conceided
      THEN 1 END)                                       wins,
    count(CASE WHEN scored = conceided
      THEN 1 END)                                       draws,
    count(CASE WHEN scored < conceided
      THEN 1 END)                                       lost,
    sum(scored) - sum(conceided)                        balance,
    sum(
        CASE WHEN scored > conceided
          THEN 3
        ELSE 0 END
        + CASE WHEN scored = conceided
          THEN 1
          ELSE 0 END)                                   points,
    count(CASE WHEN place = 'home'
      THEN 1 END)                                       home_matches,
    count(CASE WHEN place = 'home' AND scored > conceided
      THEN 1 END)                                       home_wins,
    count(CASE WHEN place = 'home' AND scored = conceided
      THEN 1 END)                                       home_draws,
    count(CASE WHEN place = 'home' AND scored < conceided
      THEN 1 END)                                       home_lost,
    SUM(CASE WHEN place = 'home'
      THEN scored
        ELSE 0 END)                                     home_scored,
    SUM(CASE WHEN place = 'home'
      THEN conceided
        ELSE 0 END)                                     home_conceided,
    count(CASE WHEN place = 'away'
      THEN 1 END)                                       away_matches,
    count(CASE WHEN place = 'away' AND scored > conceided
      THEN 1 END)                                       away_wins,
    count(CASE WHEN place = 'away' AND scored = conceided
      THEN 1 END)                                       away_draws,
    count(CASE WHEN place = 'away' AND scored < conceided
      THEN 1 END)                                       away_lost,
    SUM(CASE WHEN place = 'away'
      THEN scored
        ELSE 0 END)                                     away_scored,
    SUM(CASE WHEN place = 'away'
      THEN conceided
        ELSE 0 END)                                     away_conceided,
    GROUP_CONCAT((CASE
                  WHEN scored > conceided
                    THEN 'W'
                  WHEN scored = conceided
                    THEN 'D'
                  WHEN scored < conceided
                    THEN 'L'
                  END) ORDER BY date ASC separator '') streak
  FROM
    (
      (SELECT
         hm.date         date,
         hm.home_team_id team_id,
         hm.score_home   scored,
         hm.score_away   conceided,
         'home'          place
       FROM matches hm
       WHERE hm.season_id = :seasonId)
      UNION ALL
      (SELECT
         am.date         date,
         am.away_team_id team_id,
         am.score_away   scored,
         am.score_home   conceided,
         'away'          place
       FROM matches am
       WHERE am.season_id = :seasonId)
    ) m
    JOIN teams t ON t.id = team_id
  GROUP BY team_id
  ORDER BY points DESC, balance DESC;