5
我有一个数据库表野味十足的游戏结果,并想知道如果我可以计算出以下几点:MySQL的排球排名
- GP(场比赛)
- 胜
- 失去
- 分(2分,每赢,每1点输)
这里是我的表结构:
个CREATE TABLE `results` (
`id` int(10) unsigned NOT NULL auto_increment,
`home_team_id` int(10) unsigned NOT NULL,
`home_score` int(3) unsigned NOT NULL,
`visit_team_id` int(10) unsigned NOT NULL,
`visit_score` int(3) unsigned NOT NULL,
`tcl_id` int(3) unsigned NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;
而一些测试结果:
INSERT INTO `results` VALUES(1, 1, 21, 2, 25, 68);
INSERT INTO `results` VALUES(2, 3, 21, 4, 17, 68);
INSERT INTO `results` VALUES(3, 1, 25, 3, 9, 68);
INSERT INTO `results` VALUES(4, 2, 7, 4, 22, 68);
INSERT INTO `results` VALUES(5, 1, 19, 4, 20, 68);
INSERT INTO `results` VALUES(6, 2, 24, 3, 26, 68);
下面是一个决赛桌看起来像这样(的结果并不完全准确):
+-------------------+----+------+-------+--------+
| Team Name | GP | Wins | Loses | Points |
+-------------------+----+------+-------+--------+
| Spikers | 4 | 4 | 0 | 8 |
| Leapers | 4 | 2 | 2 | 6 |
| Ground Control | 4 | 1 | 3 | 5 |
| Touch Guys | 4 | 0 | 4 | 4 |
+-------------------+----+------+-------+--------+
需要补充的WHERE子句
tcl_id
像这样:
WHERE results.tcl_id = 68
预先感谢您。为您的示例数据
SELECT
team_id,
COUNT(*) AS GP,
SUM(is_win) AS Wins,
SUM(NOT is_win) AS Losses,
2 * SUM(is_win) + SUM(NOT is_win) AS Points
FROM
(
SELECT
home_team_id AS team_id,
home_score > visit_score AS is_win
FROM results
WHERE tcl_id = 68
UNION ALL
SELECT
visit_team_id AS team_id,
home_score < visit_score AS is_win
FROM results
WHERE tcl_id = 68
) T1
GROUP BY team_id
ORDER BY Points DESC
输出:
非常感谢您的先生。你看起来很简单,但我确信其他人之前有过这个问题。有一个问题,我加入了'team'表没有问题,但我必须在WHERE子句中添加一些内容,并且给我一个错误。在'results'表中有另一个名为'tcl_id'的字段('results'.'tcl_id')。我需要添加WHERE'tcl_id' =“68”,但它给了我这个错误: #1054 - 'where子句'中的未知列'results.tcl_id' 我不确定这个问题是什么...是它不允许我按原样访问“结果”表的UNION? – Torez 2010-05-23 20:45:33
@Torez:将'FROM results'替换为'FROM results WHERE tcl_id ='68'' in ** both ** places and it should work。 – 2010-05-23 20:52:04
你用什么格式化你的sql? (对于脱离主题感到抱歉)。 – unutbu 2010-05-23 23:40:44