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