मेरे पास दो टेबल हैं:

  • match_rating, जिसमें मैच में टीम के प्रदर्शन का डेटा होता है। प्रत्येक मैच के लिए स्वाभाविक रूप से दो टुपल्स होते हैं (चूंकि प्रत्येक मैच में दो टीमें होती हैं)। पीके मैच आईडी है, टीम आईडी।
  • घटना, जिसमें मैचों के दौरान होने वाली घटनाओं की जानकारी होती है। पीके एक ऑटोइन्क्रिमेंटेड यूआईडी है, और इसमें विदेशी कुंजी मैच_आईडी और विषय_टीम_आईडी भी शामिल है।

अब मैं एक नया दृश्य बनाना चाहता हूं जो इस तरह के क्षेत्रों के साथ प्रत्येक टीम के लिए मैच में कितनी बार कुछ घटनाएं होती है:

DB table fields

लेकिन मेरे जीवन के लिए मैं इस तथ्य के आसपास नहीं जा सकता कि मैच_रेटिंग टेबल में प्रत्येक मैच के लिए 1) दो टुपल्स हैं, और 2) मैच_आईडी पर इवेंट टेबल को क्वेरी करना दोनों टीमों के लिए इवेंट देता है।

मुझे जो सबसे करीब मिला वह कुछ इस तरह था:

SELECT SUM(
        CASE 
            WHEN evt.event_type_id = 101 THEN 1
            WHEN evt.event_type_id = 111 THEN 1
            WHEN evt.event_type_id = 121 THEN 1
            [etc]
        END    
    ) AS 'mid_chances',
    SUM(
        CASE 
            WHEN evt.event_type_id = 103 THEN 1
            WHEN evt.event_type_id = 113 THEN 1
            WHEN evt.event_type_id = 123 THEN 1
            [etc]
        END    
    ) AS 'right_chances',
    mr.tactic,
    mr.tactic_skill,
    mr.bp,
    evt.match_id,
    evt.subject_team_id    
FROM event evt
JOIN match_rating mr
     ON evt.match_id = mr.match_id
WHERE   evt.event_type_id BETWEEN 100 AND 104 OR 
        evt.event_type_id BETWEEN 110 AND 114 OR 
        evt.event_type_id BETWEEN 120 AND 124 OR 
        [etc]
GROUP BY evt.match_id  
ORDER BY `right_chances`  DESC

लेकिन फिर भी, यह दो घटनाओं की गणना करता है, 2 घटनाओं की रिपोर्ट करता है जहां 3 घटनाओं के लिए केवल 1, 6 था और इसी तरह। मैंने टीम_आईडी पर भी समूह बनाने की कोशिश की है (GROUP BY evt.match_id AND team_id), लेकिन यह केवल 2 पंक्तियों को लौटाता है, जिसमें सभी इवेंट गिने जाते हैं।

मुझे आशा है कि मैंने अपनी समस्या स्पष्ट कर दी है, और यह स्पष्ट होना चाहिए कि मुझे वास्तव में एक या दो अच्छे सुझावों की आवश्यकता है।

स्पष्टता के लिए संपादित करें (क्षमा करें): मैच_रेटिंग तालिका के लिए नमूना डेटा: यहां छवि विवरण दर्ज करें

घटना तालिका के लिए नमूना डेटा: यहां छवि विवरण दर्ज करें

परिणाम के रूप में मैं जो देखना चाहता हूं वह यह है: यहां छवि विवरण दर्ज करें

यही है, प्रत्येक मैच के लिए दो टुपल्स, प्रत्येक टीम के लिए एक, जहां टीम की घटनाओं के प्रकार को संक्षेप में प्रस्तुत किया जाता है। इस पर गौर करने के लिए बहुत-बहुत धन्यवाद!

0
Tobias 7 अक्टूबर 2020, 14:48

1 उत्तर

सबसे बढ़िया उत्तर

टिप्पणियों/प्रतिक्रिया के बाद अपडेट करें

ठीक है.. बस पुष्टि करने के लिए, आप जो चाहते हैं वह है

  • आउटपुट की प्रत्येक पंक्ति एक मैच के भीतर एक टीम का प्रतिनिधित्व करती है
  • अन्य मान (मैच_आईडी और टीम_आईडी के अलावा) कई पंक्तियों में योग या अन्य एकत्रीकरण हैं?

अगर ऐसा है, तो मेरा मानना ​​है कि आपको मैच_आईडी और टीम_आईडी द्वारा ग्रुप करना चाहिए। इससे पंक्तियों की सही संख्या उत्पन्न होनी चाहिए (प्रत्येक match_id/team_id संयोजन के लिए एक)। आप अपने प्रश्न में कहते हैं कि आपने इसे पहले ही आज़मा लिया है - मेरा सुझाव है कि इसकी समीक्षा करें (संभावित रूप से नीचे पर विचार करने के बाद भी)।

आपके डेटा के साथ, ऐसा प्रतीत होता है कि 'ईवेंट' तालिका में एक फ़ील्ड भी है जो टीम_आईडी को इंगित करता है। यह सुनिश्चित करने के लिए कि आपको केवल संबंधित टीम के ईवेंट मिले, मेरा सुझाव है कि आप मैच_रेटिंग और ईवेंट के बीच में शामिल हों, दोनों फ़ील्ड पर हों, जैसे,

FROM event evt
JOIN match_rating mr
     ON evt.match_id = mr.match_id
     AND evt.subject_team_id = mr.team_id

पिछला उत्तर - प्रश्न का उत्तर नहीं देता (बाद की टिप्पणियों के अनुसार)

बस पुष्टि करना - मुद्दा यह है कि जब आप इसे चलाते हैं, तो प्रत्येक मैच के लिए यह 2 पंक्तियों को लौटाता है - प्रत्येक टीम के लिए एक - लेकिन आप दोनों टीमों पर केवल एक पंक्ति के रूप में प्रसंस्करण करना चाहते हैं?

जैसे, आप कुछ चीजें कर सकते हैं (उदाहरण के लिए, टीम 1 रेटिंग और टीम 2 रेटिंग के साथ मैच रेटिंग तालिका में स्वयं शामिल हों)।

वैकल्पिक रूप से, आप अपने FROM को दो बार match_rating में शामिल होने के लिए संशोधित कर सकते हैं - जहां पहले की दो टीमों के लिए निचली आईडी है, जैसे,

FROM event evt
JOIN match_rating mr_team1
     ON evt.match_id = mr_team1.match_id
JOIN match_rating mr_team2
     ON evt.match_id = mr_team2.match_id
     AND mr_team1.match_id < mr_team2.match_id

बेशक, इसे ध्यान में रखने के लिए आपके प्रसंस्करण को संशोधित करने की आवश्यकता है, उदाहरण के लिए, एक पंक्ति एक मैच का प्रतिनिधित्व करती है, और आपके पास टीम 1 के लिए डेटा का एक गुच्छा और टीम 2 के लिए समान डेटा है। फिर, मुझे लगता है कि आप किसी प्रकार की रेटिंग आदि प्राप्त करने के लिए टीम 1 कॉलम और टीम 2 कॉलम के डेटा की तुलना करेंगे (उदाहरण के लिए, टीम 1 के जीतने का मौका आदि)।

1
seanb 8 अक्टूबर 2020, 00:42