2010-05-23 65 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