如何在MySQL中订购体育联赛表?

时间:2014-12-22 23:50:58

标签: php mysql

我已经有一个联赛积分表,但是,我想让它考虑到2平局等于胜利,并且在平局中,最低点优先。

目前显示如下,但技术上Team2应该赢了:

Team    W   L   T   PF  PA  PCT 
—————————————————————————————————
Team1   7   3   0   247 139 0.7000
Team2   6   2   2   220 122 0.6000 
Team3   6   4   0   191 191 0.6000
Team4   4   5   1   167 201 0.4000 
Team5   3   6   1   142 202 0.3000
Team6   2   8   0   193 305 0.2000

这是SQL:

SELECT team
 , COUNT(*)  played
 , SUM(win)  wins
 , SUM(loss) lost
 , SUM(win)/count(*) pctWon
 , SUM(draw) draws
 , SUM(SelfScore) ptsfor
 , SUM(OpponentScore) ptsagainst
 , SUM(SelfScore) - SUM(OpponentScore) goal_diff
 , SUM(3*win + draw) score
FROM (
  SELECT team
 , SelfScore
 , OpponentScore
 , SelfScore > OpponentScore win
 , SelfScore < OpponentScore loss
 , SelfScore = OpponentScore draw
  FROM (
    SELECT HomeTeam team, HomeScore SelfScore, AwayScore OpponentScore
    FROM Game
    union all select AwayTeam, AwayScore, HomeScore
    FROM Game
   ) a
) b
GROUP BY team
ORDER BY wins DESC, draws DESC, lost ASC, goal_diff DESC;

2 个答案:

答案 0 :(得分:1)

看一下你的ORDER BY条款:你实际上是要求按顺序递减顺序排列结果。这个规则优先于所有其他规则,所以很明显Team1获胜。

ORDER BY wins DESC, draws DESC, lost ASC, goal_diff DESC;
  

我想让它考虑到2平局等于胜利,   并列最低点优先。

那就是:

ORDER BY (wins*2 + draws) DESC, lost ASC, ptsagainst DESC;

答案 1 :(得分:0)

从abl的回答中,我将预先存在的, SUM(3*win + draw) score更改为  , SUM((win*2 + draw)- loss) score

然后只需输入ORDER BY score DESC, ptsagainst DESC;

这给出了预期的结果!

谢谢你们