Я имею таблицу базы данных, полную игры игровыми результатами, и хочу знать, могу ли я вычислить следующее:
Вот моя структура таблицы:
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
как так: ГДЕ результаты 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
Вывод данных для вашего примера:
4, 3, 2, 1, 5
3, 3, 2, 1, 5
1, 3, 1, 2, 4
2, 3, 1, 2, 4
Примечания: