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

प्रत्येक श्रेणी के लिए शीर्ष 10 उत्पाद प्राप्त करें

विश्लेषणात्मक कार्यों का उपयोग न करने, लेकिन विश्लेषणात्मक कार्यों का उपयोग करने के लिए संभवतः कारण हैं अकेले :

चुनें am, rf, rfm, rownum_rf2, rownum_rfmfrom(- तीसरा स्तर सबप्रोडक्ट रैंक लेता है, और प्रत्येक समान रैंक वाले - सबप्रोडक्ट के लिए, यह प्रोडक्ट रैंकिंग सेलेक्ट करता है am, rf, rfm, rownum_rfm, row_number() over (rownum_rfm order by rownum_rf) rownum_rf2 से rownum_rf2 (- 2 लेवल रैंक (बिना संबंधों के) उत्पादों के भीतर -- कैटेगरी, और प्रोडक्ट्स के भीतर सबप्रोडक्ट्स एक साथ एम, आरएफ, आरएफएम, रो_नंबर () ओवर (पार्टीशन) का चयन करें। by am order by count_rf desc) rownum_rf, row_number() over (विभाजन द्वारा am, rf order by count_rfm desc) rownum_rfm from ( -- इनर मोस्ट क्वेरी काउंट्स सबप्रोडक्ट - रेगुलर ग्रुप-बाय का उपयोग करते हुए। एक ही समय में, यह उपयोग करता है - उत्पाद द्वारा गणना प्राप्त करने के लिए विश्लेषणात्मक योग () से अधिक tg.am, ttc.rf, ttc.rfm, गिनती (*) count_rfm, योग (गिनती (*)) ओवर (tg.am द्वारा विभाजन, ttc.rf) count_rf tg आंतरिक से ttc पर tg.value =ttc.value समूह द्वारा tg.am, ttc.rf, ttc.rfm) X) Y - स्तर 3 पर, हम प्रति उत्पाद शीर्ष 5 उप-उत्पादों को छोड़कर सभी को छोड़ देते हैं जहां rownum_rfm <=5 -- शीर्ष 5 उप-उत्पाद) Z-- अंतिम क्वेरी पर फ़िल्टर केवल शीर्ष 10 उत्पादों को बरकरार रखता है जहां rownum_rf2 <=10 -- शीर्ष 10 उत्पाद पूर्वाह्न के अनुसार क्रमित होते हैं, rownum_rf2, rownum_rfm; 

मैंने रैंक के बजाय राउनम का इस्तेमाल किया ताकि आपको कभी भी संबंध न मिले, या दूसरे शब्दों में, संबंधों को बेतरतीब ढंग से तय किया जाएगा। यदि डेटा पर्याप्त सघन नहीं है (शीर्ष 10 उत्पादों में से किसी में 5 से कम उप-उत्पाद - यह इसके बजाय कुछ अन्य उत्पादों से उप-उत्पाद दिखा सकता है) तो यह भी काम नहीं करता है। लेकिन अगर डेटा सघन (बड़ा स्थापित डेटाबेस) है, तो क्वेरी को ठीक काम करना चाहिए।

नीचे डेटा के दो पास बनाता है, लेकिन प्रत्येक मामले में सही परिणाम देता है। फिर से, यह एक रैंक-बिना-टाई क्वेरी है। उप-उत्पादों की गणना tg.am, tg.rf, ttc.rfm, tg.count_rf, tg.rownum_rf, count(*) count_rfm, ROW_NUMBER() over (tg.am द्वारा विभाजन, tg.rf क्रम 1 desc द्वारा) rownum_rfm से चुनें (- सभी उत्पादों को प्रथम श्रेणी में चुनें tg.am, tg.value, ttc.rf, count(*) count_rf, ROW_NUMBER() over (आदेश 1 desc) rownum_rf से tg inner join ttc on tg.value =ttc. tg.am द्वारा मान समूह, tg.value, ttc.rf क्रम count_rf desc द्वारा) tg आंतरिक ttc पर tg.value =ttc.value और tg.rf =ttc.rf पर शामिल हों - शीर्ष 10 उत्पादों के लिए आंतरिक क्वेरी फ़िल्टर करें केवल जहां rownum_rf <=10 समूह द्वारा tg.am, tg.rf, ttc.rfm, tg.count_rf, tg.rownum_rf) X-- फ़िल्टर जहां उप-उत्पाद रैंक शीर्ष 5 में है, जहां rownum_rfm <=5 पूर्वाह्न के क्रम में, rownum_rf, rownum_rfm;

कॉलम:

count_rf :उत्पाद द्वारा बिक्री की गणना 


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मुझे टी-एसक्यूएल क्वेरी को ओरेकल समर्थित क्वेरी में बदलने में मदद चाहिए

  2. ऑरैकल में किसी उपयोगकर्ता से सभी विशेषाधिकार कैसे दिखाएं?

  3. ओरेकल मूविंग एवरेज

  4. Oracle प्रॉक्सी स्कीमा का उपयोग करके db लिंक बनाता है

  5. एसक्यूएल प्लस में स्ट्रिंग से अंतिम वर्ण निकालें