2010-05-23 54 views
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 

输出:

回答

8

这应该做你想做的

4, 3, 2, 1, 5 
3, 3, 2, 1, 5 
1, 3, 1, 2, 4 
2, 3, 1, 2, 4 

注:

  • 你的榜样数据似乎并不匹配您的预期输出 - 你的测试数据只有6场比赛,但你的预期输出有8场比赛。这就是为什么我的输出与你的不同。
  • 您尚未提供从团队ID获取团队名称的表格。只需加入团队名称的表格即可获得所需格式的结果。
+0

非常感谢您的先生。你看起来很简单,但我确信其他人之前有过这个问题。有一个问题,我加入了'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

+0

@Torez:将'FROM results'替换为'FROM results WHERE tcl_id ='68'' in ** both ** places and it should work。 – 2010-05-23 20:52:04

+0

你用什么格式化你的sql? (对于脱离主题感到抱歉)。 – unutbu 2010-05-23 23:40:44