ฉันเล่นเกมบาสเก็ตบอลที่อนุญาตให้ส่งออกสถิติเป็นไฟล์ฐานข้อมูลดังนั้นจึงสามารถคำนวณสถิติจากเกมที่ไม่ได้นำมาใช้ในเกมได้ จนถึงตอนนี้ฉันก็ไม่มีปัญหาในการคำนวณสถิติที่ฉันต้องการ แต่ตอนนี้ฉันพบปัญหา: การนับจำนวน double double และ / หรือ triple doubles ที่ผู้เล่นทำในช่วงฤดูกาลจากสถิติของเกม
คำจำกัดความของ double double และ double double มีดังนี้:
สองครั้งสองครั้ง:
double-double ถูกกำหนดเป็นผลการทำงานที่ผู้เล่นสะสมตัวเลขสองหลักรวมในสองในห้าหมวดหมู่สถิติ - คะแนน, รีบาวน์, ช่วยเหลือ, ขโมยและช็อตที่ถูกบล็อก - ในเกม
สามคู่:
Triple-Double ถูกกำหนดให้เป็นการแสดงที่ผู้เล่นสะสมตัวเลขสองหลักรวมในสามในห้าหมวดหมู่สถิติ - คะแนน, รีบาวน์, ช่วยเหลือ, ขโมยและช็อตที่ถูกบล็อก - ในเกม
Quadruple-double (เพิ่มเพื่อความกระจ่าง)
quadruple-double ถูกกำหนดให้เป็นประสิทธิภาพที่ผู้เล่นสะสมตัวเลขสองหลักรวมในสี่ในห้าหมวดหมู่ทางสถิติ ได้แก่ คะแนนรีบาวน์การช่วยเหลือการขโมยและช็อตที่ถูกบล็อกในเกม
ตาราง "PlayerGameStats" จะเก็บสถิติสำหรับแต่ละเกมที่ผู้เล่นเล่นและมีลักษณะดังนี้:
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);
ผลลัพธ์ที่ฉันต้องการได้รับจะเป็นดังนี้:
| player_id | team | doubleDoubles | tripleDoubles |
|-----------|---------|---------------|---------------|
| 1 | Nuggets | 4 | 1 |
ทางออกเดียวที่ฉันพบว่ามันแย่มากมันทำให้ฉันอ้วก ... ; o) ... มันดูเหมือนว่า:
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
... และตอนนี้คุณก็น่าจะอ้วก (หรือหัวเราะอย่างหนัก) หลังจากอ่านเรื่องนี้แล้ว ฉันไม่ได้เขียนทุกอย่างที่จำเป็นเพื่อให้ได้ชุดค่าผสมสองเท่าทั้งหมดและละเว้นคำสั่งกรณีสำหรับคู่สามเท่าเพราะมันยิ่งไร้สาระ
มีวิธีที่ดีกว่าในการทำเช่นนี้? ด้วยโครงสร้างตารางฉันมีหรือมีโครงสร้างตารางใหม่ (ฉันสามารถเขียนสคริปต์เพื่อแปลงตาราง)
ฉันสามารถใช้ MySQL 5.5 หรือ PostgreSQL 9.2
นี่คือลิงค์ไปยัง SqlFiddle พร้อมข้อมูลตัวอย่างและโซลูชันอันยิ่งใหญ่ของฉันที่ฉันโพสต์ไว้ด้านบน: http://sqlfiddle.com/#!2/af6101/3
โปรดทราบว่าฉันไม่ได้สนใจ quadruple-doubles (ดูด้านบน) เนื่องจากพวกเขาไม่ได้เกิดขึ้นในเกมที่ฉันเล่นเท่าที่ฉันรู้ แต่มันจะเป็นข้อดีถ้าแบบสอบถามสามารถขยายได้อย่างง่ายดายโดยไม่ต้องเขียนบัญชีอีกมาก สำหรับสี่เท่าคู่