我有一个包含两个表,匹配和团队的数据库。团队表很简单,它包含一个包含20个团队列表的字段。匹配表记录了团队之间的比赛。字段如下(带有数据示例):
+------+----------+-------------+-----------+-----------+--------+---------+
| Week | HomeTeam | AwayTeam | HomeScore | AwayScore | Result | MATCHID |
+------+----------+-------------+-----------+-----------+--------+---------+
| 1 | Stoke | Aston Villa | 0 | 1 | A | 151 |
+------+----------+-------------+-----------+-----------+--------+---------+
我的问题是,如何以每个团队获得的积分等形式从中返回有用的数据?我可以计算给定团队获得的积分,但不能计算表中所有团队的积分。例如,我可以用
计算利物浦的积分SELECT
(SELECT COUNT(matches.Result)*3
FROM matches
WHERE (HomeTeam='Liverpool' AND Result='H') OR (AwayTeam='Liverpool' AND Result='A'))+
(SELECT COUNT(matches.Result)
FROM matches
WHERE (HomeTeam='Liverpool' OR AwayTeam='Liverpool') AND Result='D');
将吐出' 21'的输出。但我真正想要的是一个团队列表(由团队'表定义)和每个团队获得的积分。我该怎么做呢?
答案 0 :(得分:2)
您需要使用GROUP BY
来获取每个人的团队统计信息。然后,您可以使用条件聚合来获得所需的结果。
以下是SUM
和CASE
的示例:
SELECT
t.teamname,
3*SUM(
CASE WHEN t.teamname = m.hometeam AND m.result = 'H' THEN 1
WHEN t.teamname = m.awayteam AND m.result = 'A' THEN 1
ELSE 0
END) +
SUM(
CASE WHEN m.result = 'D' THEN 1
ELSE 0
END)
FROM teams t
JOIN matches m ON t.teamname in (hometeam,awayteam)
GROUP BY
t.teamname