আমি একটি বাস্কেটবল গেম খেলি যা এটির পরিসংখ্যানকে একটি ডেটাবেস ফাইল হিসাবে আউটপুট করতে দেয়, যাতে কেউ এটি থেকে পরিসংখ্যান গণনা করতে পারে যা গেমটিতে প্রয়োগ করা হয় না। এখনও অবধি আমার যে পরিসংখ্যান চেয়েছিল তা গণনা করতে আমার কোনও সমস্যা হয়নি, তবে এখন আমি একটি সমস্যায় পড়েছি: তার গেমের পরিসংখ্যান থেকে এই মৌসুমে ডাবল ডাবল এবং / অথবা ট্রিপল ডাবলসের খেলোয়াড়ের সংখ্যা গণনা করা।
ডাবল ডাবল এবং ট্রিপল ডাবলের সংজ্ঞাটি নিম্নরূপ:
ডাবল ডবল:
একটি ডাবল-ডাবলকে এমন একটি পারফরম্যান্স হিসাবে সংজ্ঞায়িত করা হয় যেখানে খেলোয়াড় একটি খেলায় পাঁচটি পরিসংখ্যান বিভাগের মধ্যে দুটি-পয়েন্ট, রিবাউন্ডস, সহায়তা, স্টিল এবং অবরুদ্ধ শটগুলিতে মোট দ্বিগুণ সংখ্যা সংগ্রহ করে।
ট্রিপল ডবল:
একটি ট্রিপল-ডাবলকে একটি পারফরম্যান্স হিসাবে সংজ্ঞায়িত করা হয় যেখানে খেলোয়াড় একটি খেলায় পাঁচটি পরিসংখ্যান বিভাগ — পয়েন্ট, রিবাউন্ডস, সহায়তা, স্টিলস এবং ব্লক শট — তিনটিতে মোট দ্বিগুণ সংখ্যা সংগ্রহ করে।
চতুর্ভুজ দ্বিগুণ (স্পষ্টকরণের জন্য যুক্ত)
একটি চতুর্ভুজ দ্বিগুণকে একটি পারফরম্যান্স হিসাবে সংজ্ঞায়িত করা হয় যেখানে খেলোয়াড় একটি খেলায় পাঁচটি পরিসংখ্যান বিভাগ categories পয়েন্ট, রিবাউন্ডস, সহায়তা, স্টিলস এবং অবরুদ্ধ শটগুলিতে মোট চারটি দ্বিগুণ সংখ্যা সংগ্রহ করে।
"প্লেয়ারগেমস্ট্যাটস" টেবিলটি প্রতিটি খেলোয়াড়ের জন্য পরিসংখ্যান সঞ্চয় করে যা কোনও খেলোয়াড় খেলে এবং নীচে দেখায়:
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
... এবং এখন আপনি সম্ভবত এটি পড়ার পরেও (বা জোরে হাসছেন)। সমস্ত ডাবল ডাবল সংমিশ্রণের জন্য প্রয়োজনীয় সমস্ত কিছুই আমি লিখিনি, এবং ট্রিপল ডাবলের ক্ষেত্রে কেস স্টেটমেন্ট বাদ দিয়েছি কারণ এটি আরও হাস্যকর।
এই কাজ করতে একটি ভাল উপায় আছে কি? হয় আমার কাছে থাকা টেবিল কাঠামোর সাথে বা একটি নতুন টেবিল কাঠামো (আমি টেবিলটি রূপান্তর করতে কোনও স্ক্রিপ্ট লিখতে পারি)।
আমি মাইএসকিউএল 5.5 বা পোস্টগ্রিএসকিউএল 9.2 ব্যবহার করতে পারি।
উদাহরণস্বরূপ ডেটা এবং আমার ভয়ঙ্কর সমাধান সহ আমি উপরে পোস্ট করা সিক্লফিডেলের একটি লিঙ্ক এখানে রয়েছে: http://sqlfiddle.com/#!2/af6101/3
নোট করুন যে আমি চতুর্থ দ্বিগুণ (উপরে দেখুন) যেহেতু আমি জানি যতদূর আমি খেলি না কেন সেগুলিতে সত্যই আগ্রহী নই, তবে অ্যাকাউন্টে পুনরায় লেখার ব্যতীত যদি ক্যোয়ারীটি সহজেই প্রসারিত হয় তবে এটি একটি প্লাস হবে চতুর্মুখী দ্বৈত জন্য।