Mysql 用分数查询胜负
如果我有一张桌子:Mysql 用分数查询胜负,mysql,sql,Mysql,Sql,如果我有一张桌子: matches id team_one team_two one_score two_score 我将如何进行查询以获得以下结果: Team A Win: 2 Lose: 0 Score: 5 Team B Win: 2 Lose: 0 Score: 3 Team C Win: 1 Lose: 1 Score: 3 Team D Win: 0 Lose: 2 Score: 1 获胜的队
matches
id
team_one
team_two
one_score
two_score
我将如何进行查询以获得以下结果:
Team A
Win: 2 Lose: 0 Score: 5
Team B
Win: 2 Lose: 0 Score: 3
Team C
Win: 1 Lose: 1 Score: 3
Team D
Win: 0 Lose: 2 Score: 1
获胜的队在表中得分较高。诀窍在于,给定的队可能出现在两列中的一列。您可以使用UNION解决这个问题,其中UNION的第二个表只需交换第一个表中的列。之后,它只是一个简单的分组:
SELECT team, SUM(Win) As Won, SUM(Loss) as Lost, SUM(score) as Score
FROM
( SELECT team_one as team,
CASE WHEN one_score > two_score THEN 1 ELSE 0 END as Win,
CASE WHEN one_score < two_score THEN 1 ELSE 0 END as Loss, one_score as score
FROM matches
UNION ALL
SELECT team_two as team
CASE WHEN two_score > one_score THEN 1 ELSE 0 END as Win,
CASE WHEN two_score < one_score THEN 1 ELSE 0 END as Loss, two_score as score
FROM matches
) t
GROUP BY team
ORDER By Won, Lost DESC, Score
顺便说一句,我很久以前就研究过这样一个数据库系统,它有一个带有成对记录的表。这不是比赛结果,而是配对数据。我们发现,为每场比赛存储两条记录的性能要高得多。一场比赛的两条记录将共享一个共同的比赛id,但与球队的排列顺序相反。前端代码和后端维护任务用于确保配对记录正确存储
这使得我们需要更高效地执行某些查询,因为我们可以对表进行一次索引,然后只需查看相应的team_列,就可以从表中为特定的团队进行选择。再说一次,这不是体育数据,所以你的结果可能会有所不同,但我们确实发现,在我们的问题空间中,它的效果要好得多
在旧系统中,这种效率的部分原因是,一旦输入,配对数据很少改变。这似乎很适合你所做的事情。你试过什么吗?B队的得分不应该是5分吗?B赢了两次和A一样…你们怎么算平局?