Nemyslím si, že vaše rozsahy jsou zcela správné pro dotaz, který jste napsali, ačkoli znění zadání je nejednoznačné, protože výraz „mezi“ zahrnuje – takže jak je otázka formulována, kreditní skóre přesně 600 by se objevilo v obou „dolní“ a „průměrné“ závorky. Vaše verze umístí 600 do 'spodní' závorky, ale je diskutabilní, která by měla být; Myslím, že by to mělo být „průměrné“ z ostatních definic, ale není to jasné. V otázce není žádná závorka pro skóre menší než 500, ale pokud nějaké z nich máte, váš aktuální kód je zahrne do „průměrné“ závorky, protože jsou menší než 700, ale ne mezi 500 a 600.
Takže bych to interpretoval jako:
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)
);
Název vaší otázky odkazuje na ROLLUP a k získání celkového řádku můžete použít tuto funkci:
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);
Pokud máte nějaké skóre pod 500, oba budou obsahovat řádek pro ty s creditscore_range
jako null; což je matoucí s ROLLUP
verze. Možná budete chtít odfiltrovat skóre menší než 500 z nejvnitřnějšího dotazu, ale opět není jasné, zda je to nutné nebo žádoucí.
Nejsem si jistý, že zadání hledá, když mluví o hodnocení. To znamená změnit pořadí sloupců na základě hodnot, které obsahují. Pořadí podle stavu by dávalo větší smysl, kdyby byla data otočena jiným způsobem.