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

Oracle11g में पिवट टेबल के साथ रोलअप, रैंक () का उपयोग कैसे करें

मुझे नहीं लगता कि आपकी श्रेणियां आपके द्वारा लिखी गई क्वेरी के लिए बिल्कुल सही हैं, हालांकि असाइनमेंट का शब्दांकन अस्पष्ट है क्योंकि 'बीच' समावेशी है - इसलिए जैसा कि प्रश्न का शब्द है, ठीक 600 का क्रेडिट स्कोर दोनों में दिखाई देगा 'निचला' और 'औसत' कोष्ठक। आपका संस्करण 600 को 'निचले' ब्रैकेट में रखेगा, लेकिन यह बहस का विषय है कि इसे किसमें होना चाहिए; मुझे लगता है कि यह अन्य परिभाषाओं से 'औसत' होना चाहिए, लेकिन यह अस्पष्ट है। प्रश्न में 500 से कम अंकों के लिए कोई कोष्ठक नहीं है, लेकिन यदि आपके पास उनमें से कोई है, तो आपका वर्तमान कोड उन्हें 'औसत' कोष्ठक में शामिल कर देगा, क्योंकि वे 700 से कम हैं लेकिन 500 और 600 के बीच नहीं हैं।

तो मैंने इसकी व्याख्या इस प्रकार की होगी:

SELECT * FROM (
  SELECT case
           when CREDITSCORE >= 500 and CREDITSCORE < 600 then 'LOWER RANGE(500-600)'
           when CREDITSCORE >= 600 and CREDITSCORE < 700 then 'AVERAGE RANGE(600-700)'
           when CREDITSCORE >= 700 then 'PREMIUM RANGE(700+)'
    end as CREDITSCORE_RANGE,
    state
  FROM customer
) 
PIVOT (
  count(state) FOR state IN ('PA' as pa, 'CA' as ca, 'NY' as ny, 'MD' as md)
);

आपका प्रश्न शीर्षक रोलअप को संदर्भित करता है, और कुल पंक्ति प्राप्त करने के लिए आप उस फ़ंक्शन का उपयोग कर सकते हैं:

SELECT creditscore_range, sum(pa) AS pa, sum(ca) AS ca, sum(ny) AS ny, sum(md) AS md
FROM (
  SELECT * FROM (
    SELECT CASE
             WHEN creditscore >= 500 AND creditscore < 600 THEN 'LOWER RANGE(500-600)'
             WHEN creditscore >= 600 AND creditscore < 700 THEN 'AVERAGE RANGE(600-700)'
             WHEN creditscore >= 700 THEN 'PREMIUM RANGE(700+)'
      END AS creditscore_range,
      state
    FROM customer
  ) 
  PIVOT (
    COUNT(state) FOR state IN ('PA' AS pa, 'CA' AS ca, 'NY' AS ny, 'MD' AS md)
  )
)
GROUP BY ROLLUP (creditscore_range);

अगर आपका कोई स्कोर 500 से कम है तो दोनों में creditscore_range वालों के लिए एक लाइन शामिल होगी शून्य के रूप में; जो ROLLUP . के साथ भ्रमित करने वाला है संस्करण। आप अंतरतम क्वेरी से 500 से कम के किसी भी स्कोर को फ़िल्टर करना चाह सकते हैं, लेकिन फिर से यह स्पष्ट नहीं है कि यह आवश्यक है या वांछनीय है।

मुझे यकीन नहीं है कि जब यह रैंकिंग के बारे में बात करता है तो असाइनमेंट ढूंढ रहा है। इसका मतलब है कि कॉलम ऑर्डर को उनके मूल्यों के आधार पर बदलना है। अगर डेटा को दूसरी तरफ घुमाया जाता है, तो राज्य के हिसाब से रैंकिंग ज़्यादा मायने रखती है।




  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. Oracle में वैश्विक गैर-विभाजित सूचकांक

  3. Oracle SQL में आइटम के संबंधित समूह का चयन कैसे करें

  4. NHibernate के साथ एक ही ASP.NET ऐप में Oracle और SQL सर्वर दोनों का समर्थन करने के लिए सिफारिशें

  5. BadImageFormatException। यह तब होगा जब 64 बिट मोड में 32 बिट Oracle क्लाइंट स्थापित घटकों के साथ चल रहा हो