Ik denk niet dat je bereik helemaal klopt voor de vraag die je hebt geschreven, hoewel de bewoording van de opdracht dubbelzinnig is omdat 'tussen' inclusief is - dus als de vraag is geformuleerd, zou een credit score van precies 600 verschijnen in beide de 'lagere' en 'gemiddelde' haakjes. Uw versie zal 600 in de 'lagere' haak plaatsen, maar het is discutabel welke het zou moeten zijn; Ik zou denken dat het 'gemiddeld' zou moeten zijn van de andere definities, maar het is onduidelijk. Er is geen haakje in de vraag voor scores van minder dan 500, maar als je een van deze hebt, dan zal je huidige code ze opnemen in het 'gemiddelde' haakje, aangezien ze minder dan 700 zijn, maar niet tussen 500 en 600.
Dus ik zou dat hebben geïnterpreteerd als:
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)
);
De titel van uw vraag verwijst naar ROLLUP, en om de totale rij te krijgen, kunt u die functie gebruiken:
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);
Als je scores lager dan 500 hebt, dan zal Beide een regel bevatten voor degenen met de creditscore_range
als nul; wat verwarrend is met de ROLLUP
versie. Misschien wilt u scores van minder dan 500 uit de binnenste zoekopdracht filteren, maar nogmaals, het is niet duidelijk of dat nodig of wenselijk is.
Ik weet echter niet zeker of de opdracht zoekt als het over ranking gaat. Dat betekent dat de kolomvolgorde moet worden gewijzigd op basis van de waarden die ze bevatten. Rangschikken op staat zou logischer zijn als de gegevens de andere kant op waren gedraaid.