Não acho que seus intervalos estejam corretos para a consulta que você escreveu, embora o texto da tarefa seja ambíguo, pois 'entre' é inclusivo - então, à medida que a pergunta é formulada, uma pontuação de crédito de exatamente 600 apareceria em ambos os colchetes 'inferior' e 'médio'. Sua versão colocará 600 no colchete 'inferior', mas é discutível em qual deveria estar; Eu acho que deveria ser 'média' das outras definições, mas não está claro. Não há colchetes na pergunta para pontuações inferiores a 500, mas se você tiver algum desses, seu código atual os incluirá no colchete 'médio', pois são inferiores a 700, mas não entre 500 e 600.
Então eu teria interpretado isso como:
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)
);
O título da sua pergunta se refere a ROLLUP e, para obter a linha total, você pode usar essa função:
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);
Se você tiver alguma pontuação abaixo de 500, Ambos incluirão uma linha para aqueles com o
creditscore_range
como nulo; que é confuso com o ROLLUP
versão. Você pode querer filtrar qualquer pontuação inferior a 500 da consulta mais interna, mas novamente não está claro se isso é necessário ou desejável. Não tenho certeza de que a atribuição esteja procurando quando fala sobre classificação. Isso implica alterar a ordem das colunas com base nos valores que elas contêm. A classificação por estado faria mais sentido se os dados fossem girados para o outro lado.