how to output a standings table on the fly from a mysql table of football [soccer] results?

后端 未结 3 1827
天命终不由人
天命终不由人 2020-12-13 16:07

I have been trying to find something about this topic and I can\'t seem to find anything, there were a few questions on here but they didn\'t work for my particular project.

3条回答
  •  孤城傲影
    2020-12-13 16:31

    Recently I had to make quite more extended version of datatable. Although it is based on my own schema, but it maybe useful for someone (it is based on previous a'r answer):

      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;
    

提交回复
热议问题