मुझे नहीं लगता कि आपकी श्रेणियां आपके द्वारा लिखी गई क्वेरी के लिए बिल्कुल सही हैं, हालांकि असाइनमेंट का शब्दांकन अस्पष्ट है क्योंकि 'बीच' समावेशी है - इसलिए जैसा कि प्रश्न का शब्द है, ठीक 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 से कम के किसी भी स्कोर को फ़िल्टर करना चाह सकते हैं, लेकिन फिर से यह स्पष्ट नहीं है कि यह आवश्यक है या वांछनीय है।
मुझे यकीन नहीं है कि जब यह रैंकिंग के बारे में बात करता है तो असाइनमेंट ढूंढ रहा है। इसका मतलब है कि कॉलम ऑर्डर को उनके मूल्यों के आधार पर बदलना है। अगर डेटा को दूसरी तरफ घुमाया जाता है, तो राज्य के हिसाब से रैंकिंग ज़्यादा मायने रखती है।