Tôi chơi một trò chơi bóng rổ cho phép xuất số liệu thống kê của nó dưới dạng tệp cơ sở dữ liệu, vì vậy người ta có thể tính toán số liệu thống kê từ trò chơi không được triển khai trong trò chơi. Cho đến nay tôi không gặp vấn đề gì trong việc xác định số liệu thống kê mà tôi muốn, nhưng bây giờ tôi gặp phải một vấn đề: đếm số lần nhân đôi và / hoặc nhân ba số người chơi được thực hiện trong mùa giải từ số liệu thống kê trò chơi của anh ta.
Định nghĩa của một nhân đôi và một nhân đôi như sau:
Gấp đôi:
Nhân đôi được định nghĩa là hiệu suất trong đó người chơi tích lũy tổng số có hai chữ số trong hai trong số năm loại thống kê Điểm điểm, rebound, hỗ trợ, đánh cắp và chặn các cú sút trong trò chơi.
Nhân đôi:
Bộ ba nhân đôi được định nghĩa là hiệu suất trong đó người chơi tích lũy tổng số hai chữ số trong ba trong số năm loại thống kê Điểm điểm, rebound, hỗ trợ, đánh cắp và bắn bị chặn trong trò chơi.
Tăng gấp đôi ( gấp đôi để làm rõ)
Nhân đôi gấp đôi được định nghĩa là hiệu suất trong đó người chơi tích lũy tổng số hai chữ số trong bốn trong năm loại thống kê Điểm điểm, rebound, hỗ trợ, đánh cắp và bắn chặn trong một trò chơi.
Bảng "PlayerGameStats" lưu trữ số liệu thống kê cho mỗi trò chơi mà người chơi chơi và xem như sau:
CREATE TABLE PlayerGameStats AS SELECT * FROM ( VALUES
( 1, 1, 1, 'Nuggets', 'Cavaliers', 6, 8, 2, 2, 0 ),
( 2, 1, 2, 'Nuggets', 'Clippers', 15, 7, 0, 1, 3 ),
( 3, 1, 6, 'Nuggets', 'Trailblazers', 11, 11, 1, 2, 1 ),
( 4, 1, 10, 'Nuggets', 'Mavericks', 8, 10, 2, 2, 12 ),
( 5, 1, 11, 'Nuggets', 'Knicks', 23, 12, 1, 0, 0 ),
( 6, 1, 12, 'Nuggets', 'Jazz', 8, 8, 11, 1, 0 ),
( 7, 1, 13, 'Nuggets', 'Suns', 7, 11, 2, 2, 1 ),
( 8, 1, 14, 'Nuggets', 'Kings', 10, 15, 0, 3, 1 ),
( 9, 1, 15, 'Nuggets', 'Kings', 9, 7, 5, 0, 4 ),
(10, 1, 17, 'Nuggets', 'Thunder', 13, 10, 10, 1, 0 )
) AS t(id,player_id,seasonday,team,opponent,points,rebounds,assists,steals,blocks);
Đầu ra tôi muốn đạt được trông như thế này:
| player_id | team | doubleDoubles | tripleDoubles |
|-----------|---------|---------------|---------------|
| 1 | Nuggets | 4 | 1 |
Giải pháp duy nhất tôi tìm thấy cho đến nay là quá khủng khiếp, nó khiến tôi phát điên ...; o) ... Có vẻ như thế này:
SELECT
player_id,
team,
SUM(CASE WHEN(points >= 10 AND rebounds >= 10) OR
(points >= 10 AND assists >= 10) OR
(points >= 10 AND steals >= 10)
THEN 1
ELSE 0
END) AS doubleDoubles
FROM PlayerGameStats
GROUP BY player_id
... và bây giờ có lẽ bạn cũng đang cười (hoặc cười rất nhiều) sau khi đọc nó. Tôi thậm chí đã không viết ra tất cả mọi thứ cần thiết để có được tất cả các kết hợp kép, và bỏ qua tuyên bố trường hợp cho bộ ba nhân đôi vì nó thậm chí còn kỳ cục hơn.
Có cách nào tốt hơn để làm điều này? Với cấu trúc bảng tôi có hoặc với cấu trúc bảng mới (tôi có thể viết một tập lệnh để chuyển đổi bảng).
Tôi có thể sử dụng MySQL 5.5 hoặc PostgreQuery 9.2.
Đây là một liên kết đến SqlFiddle với dữ liệu mẫu và giải pháp khủng khiếp của tôi, tôi đã đăng ở trên: http://sqlfiddle.com/#!2/af6101/3
Lưu ý rằng tôi không thực sự quan tâm đến việc nhân đôi (xem ở trên) vì chúng không xảy ra trong trò chơi mà tôi biết, nhưng sẽ là một điểm cộng nếu truy vấn có thể dễ dàng mở rộng mà không cần viết lại nhiều vào tài khoản cho tăng gấp bốn lần.