मैं एक बास्केटबॉल गेम खेलता हूं जो एक डेटाबेस फ़ाइल के रूप में अपने आंकड़ों को आउटपुट करने की अनुमति देता है, इसलिए कोई इससे उन आंकड़ों की गणना कर सकता है जो गेम में लागू नहीं होते हैं। अब तक मुझे उन आंकड़ों को शांत करने में कोई समस्या नहीं है जो मुझे चाहिए थे, लेकिन अब मैं एक समस्या में चला गया हूं: अपने खेल के आंकड़ों से सीज़न में बनाए गए खिलाड़ी से दोगुने और / या ट्रिपल युगल की गिनती।
एक डबल डबल और ट्रिपल डबल की परिभाषा इस प्रकार है:
दुगुना दुगुना:
एक डबल-डबल को एक प्रदर्शन के रूप में परिभाषित किया गया है जिसमें एक खिलाड़ी दो सांख्यिकीय श्रेणियों में दो अंकों की कुल संख्या को जमा करता है- अंक, रिबॉइड, सहायता, चोरी और अवरुद्ध शॉट्स - एक खेल में।
तिगुना दोगुना:
ट्रिपल-डबल को एक प्रदर्शन के रूप में परिभाषित किया जाता है, जिसमें एक खिलाड़ी पांच सांख्यिकीय श्रेणियों में से तीन अंकों में एक डबल अंकों की कुल संख्या जमा करता है- अंक, रिबॉइड, सहायता, चोरी और अवरुद्ध शॉट्स - एक खेल में।
चौगुना-डबल (स्पष्टीकरण के लिए जोड़ा गया)
एक चौगुनी-डबल को एक प्रदर्शन के रूप में परिभाषित किया जाता है जिसमें एक खिलाड़ी पांच सांख्यिकीय श्रेणियों में से चार में एक दोहरे अंक की कुल संख्या जमा करता है- अंक, रिबॉइड, सहायता, चोरी और अवरुद्ध शॉट्स - एक खेल में।
"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 |
एकमात्र समाधान जो मुझे अब तक मिला है वह इतना भयानक है कि यह मुझे आश्चर्यचकित करता है ...; ओ) ... यह इस तरह दिखता है:
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
ध्यान दें कि मुझे वास्तव में चौगुनी-युगल में दिलचस्पी नहीं है (ऊपर देखें) क्योंकि वे उस गेम में नहीं होते हैं जो मैं जानता हूं कि मैं जहां तक खेलता हूं, लेकिन यह एक प्लस होगा यदि क्वेरी को आसानी से विस्तार के बिना फिर से लिखना संभव है चौगुनी-युगल के लिए।