开发者

MySQL Volleyball Standings

开发者 https://www.devze.com 2022-12-31 03:31 出处:网络
I have a database table full of game by game results and want to know if I can calculate the following:

I have a database table full of game by game results and want to know if I can calculate the following:

  • GP (games played)
  • Wins
  • Loses
  • Points (2 points for each win, 1 point for each lose)

Here is my table structure:

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 ;

And a few testing results:

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);

Here is what a final table would look something like this (results are not completely accurate):

+-------------------+----+------+-------+--------+
| 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 |
+-------------------+----+------+-------+----开发者_如何学编程----+

Need to add WHERE clause for

tcl_id
like so:

WHERE results.tcl_id = 68

Thank you in advance.


This should do what you want:

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

Output for your example data:

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

Notes:

  • Your example data doesn't seem to match with your expected output - your test data only has 6 games played, but your expected output has 8 games. This is why my output is different from yours.
  • You haven't provided the table for getting the team names from the team ids. Just join with your table with the team names to get the result in the format you want.
0

精彩评论

暂无评论...
验证码 换一张
取 消