Jeg tror ikke, dine intervaller er helt rigtige for den forespørgsel, du har skrevet, selvom ordlyden af opgaven er tvetydig, da 'mellem' er inklusiv - så som spørgsmålet er formuleret, vil en kreditscore på præcis 600 vises i begge 'nedre' og 'gennemsnitlige' parenteser. Din version vil sætte 600 i den 'nederste' parentes, men det kan diskuteres, hvilken den skal være i; Jeg ville tro, at det burde være 'gennemsnitligt' fra de andre definitioner, men det er uklart. Der er ingen parentes i spørgsmålet for scorer under 500, men hvis du har nogen af dem, vil din nuværende kode inkludere dem i den 'gennemsnitlige' parentes, da de er mindre end 700, men ikke mellem 500 og 600.
Så jeg ville have tolket det som:
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)
);
Din spørgsmåls titel henviser til ROLLUP, og for at få den samlede række kan du bruge denne funktion:
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);
Hvis du har nogen score under 500, vil Begge inkludere en linje for dem med creditscore_range
som null; hvilket er forvirrende med ROLLUP
version. Du ønsker måske at filtrere alle scores mindre end 500 ud fra den inderste forespørgsel, men igen er det ikke klart, om det er nødvendigt eller ønskeligt.
Jeg er dog ikke sikker på, at opgaven leder efter, når den taler om rangering. Det indebærer at ændre kolonnerækkefølgen baseret på de værdier, de indeholder. Rangering efter stat ville give mere mening, hvis dataene blev drejet den anden vej.