Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

SQL को सेल्फ जॉइन और रैंकिंग की आवश्यकता है

अगर मुझे समझ में आ गया है कि आप क्या चाहते हैं, तो आप इसे विश्लेषणात्मक कार्य और विंडो खंड

select season, matchdate, hometeam, awayteam, homegoals, awaygoals,
    case when home_cnt >= 5 and away_cnt >= 5 then
        home_tot + away_tot
    else null end as totalgoals
from (
    select season, matchdate, hometeam, awayteam, homegoals, awaygoals,
        count(*) over (partition by season, hometeam
            order by matchdate
            rows between 5 preceding and 1 preceding) as home_cnt,
        sum(homegoals + awaygoals) over (partition by season, hometeam
            order by matchdate
            rows between 5 preceding and 1 preceding) as home_tot,
        count(*) over (partition by season, awayteam
            order by matchdate
            rows between 5 preceding and 1 preceding) as away_cnt,
        sum(homegoals + awaygoals) over (partition by season, awayteam
            order by matchdate
            rows between 5 preceding and 1 preceding) as away_tot
    from matches
)
order by season, matchdate, hometeam, awayteam;

आंतरिक चयन count के विश्लेषणात्मक संस्करण का उपयोग करते हुए, प्रत्येक सीज़न में प्रत्येक होम/अवे टीम के लिए मैचों की संख्या और उनके बीच लक्ष्यों की कुल संख्या की गणना करता है। और sum , और विंडो क्लॉज rows between ... दोनों को पिछले पांच तक सीमित करता है, वर्तमान पंक्ति को छोड़कर, जो मुझे लगता है कि आप जो चाहते हैं वह है। बाहरी चयन तब वर्तमान पंक्ति में दो टीमों के लिए प्रासंगिक योग जोड़ता है, लेकिन दोनों गणनाओं की जांच करता है और कुल शून्य छोड़ देता है यदि कोई <5 है। ध्यान दें कि यह केवल matches को हिट करता है एक बार टेबल।

ऑर्डर-बाय से ठीक पहले एक अतिरिक्त फ़िल्टर के साथ:

where season = 2012 and homeTeam = 'Norwich' and awayteam = 'Aston Villa'

... आपको मिलता है:

    SEASON MATCHDATE HOMETEAM                  AWAYTEAM                   HOMEGOALS  AWAYGOALS TOTALGOALS
---------- --------- ------------------------- ------------------------- ---------- ---------- ----------
      2012 13-MAY-12 Norwich                   Aston Villa                        2          0         30

आप इसका उपयोग मिलान पंक्ति के लिए तालिका को अपडेट करने के लिए कर सकते हैं, हालांकि आम तौर पर मैं संभावित डेटा अखंडता त्रुटियों से बचने के लिए आवश्यकतानुसार इसकी गणना करता हूं, संभवतः एक दृश्य में।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle PLSQL डेटाटाइम्स को 15 मिनट के ब्लॉक में छोटा करता है

  2. SQL का उपयोग करके विंडचिल का डेटाबेस क्वेरी करना

  3. इंटरफेस त्रुटि:ओरेकल पर्यावरण संभाल हासिल करने में असमर्थ; ORACLE_HOME सही है और SQL*प्लस कनेक्ट हो जाएगा

  4. Oracle PLSQL टेबल्स (एसोसिएटिव एरे या इंडेक्स-बाय टेबल) का उपयोग कैसे करें

  5. ओरेकल के साथ एन-हाइबरनेट में लंबे तार त्रुटि का कारण बनते हैं