2010-05-23 42 views
5

Tôi có một bảng cơ sở dữ liệu đầy đủ của trò chơi bởi kết quả trận đấu và muốn biết nếu tôi có thể tính toán như sau:MySQL Volleyball Bảng xếp hạng

  • GP (trò chơi chơi)
  • Thắng
  • Bại
  • Điểm (2 điểm cho mỗi chiến thắng, 1 điểm cho mỗi lần thua)

Đây là cấu trúc bảng của tôi:

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 ; 

Và một vài thử nghiệm kết quả:

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

Đây là những gì một bảng cuối cùng sẽ giống như thế này (kết quả không hoàn toàn chính xác):

+-------------------+----+------+-------+--------+ 
| 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 | 
+-------------------+----+------+-------+--------+ 

Cần thêm mệnh đề WHERE cho

tcl_id
giống như vậy:

WHERE results.tcl_id = 68

Cảm ơn bạn trước.

Trả lời

8

này nên làm những gì bạn muốn:

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 ví dụ dữ liệu của bạn:

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

Ghi chú:

  • dữ liệu ví dụ của bạn dường như không phù hợp với bạn đầu ra dự kiến ​​- dữ liệu thử nghiệm của bạn chỉ có 6 trò chơi, nhưng kết quả mong đợi của bạn có 8 trò chơi. Đây là lý do tại sao đầu ra của tôi khác với kết quả của bạn.
  • Bạn chưa cung cấp bảng để lấy tên nhóm từ các id nhóm. Chỉ cần tham gia với bảng của bạn với tên nhóm để có được kết quả theo định dạng bạn muốn.
+0

Cảm ơn bạn rất nhiều. Bạn làm cho nó trông rất đơn giản, nhưng tôi chắc chắn rằng khác đã có vấn đề này trước đây. Một câu hỏi, tôi đã tham gia bảng 'teams' không vấn đề gì nhưng tôi phải thêm một cái gì đó vào mệnh đề WHERE và nó cho tôi một lỗi. Trong bảng 'results' có một trường khác có tên' tcl_id' ('results'.'tcl_id'). Tôi cần thêm WHERE 'tcl_id' =" 68 "nhưng nó cho tôi lỗi này: # 1054 - Cột không xác định 'results.tcl_id' trong 'where khoản' Tôi không chắc vấn đề là gì ... là nó UNION không cho phép tôi truy cập vào bảng 'results' như thế nào? – Torez

+0

@Torez: Thay thế 'TỪ kết quả' bằng' TỪ kết quả WHERE tcl_id = '68'' ở ** cả hai vị trí ** và nó sẽ hoạt động. –

+0

Bạn sử dụng định dạng sql của mình như thế nào? (xin lỗi vì không có chủ đề). – unutbu

Các vấn đề liên quan