Je ne pense pas que vos plages soient tout à fait adaptées à la requête que vous avez écrite, bien que le libellé de l'affectation soit ambigu car "entre" est inclus - de sorte que la question est formulée, un score de crédit d'exactement 600 apparaîtrait dans les deux les tranches « inférieure » et « moyenne ». Votre version mettra 600 dans la tranche "inférieure", mais il est discutable de savoir dans quelle position elle devrait figurer ; Je pense que cela devrait être «moyen» par rapport aux autres définitions, mais ce n'est pas clair. Il n'y a pas de tranche dans la question pour les scores inférieurs à 500, mais si vous en avez, votre code actuel les inclura dans la tranche "moyenne", puisqu'ils sont inférieurs à 700 mais pas entre 500 et 600.
J'aurais donc interprété cela comme :
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)
);
Le titre de votre question fait référence à ROLLUP, et pour obtenir le total de la ligne, vous pouvez utiliser cette fonction :
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);
Si vous avez des scores inférieurs à 500, les deux incluront une ligne pour ceux avec le creditscore_range
comme nul ; qui prête à confusion avec le ROLLUP
version. Vous voudrez peut-être filtrer les scores inférieurs à 500 à partir de la requête la plus interne, mais encore une fois, il n'est pas clair si cela est nécessaire ou souhaitable.
Je ne suis pas sûr que la mission recherche quand elle parle de classement. Cela implique de changer l'ordre des colonnes en fonction des valeurs qu'elles contiennent. Le classement par état aurait plus de sens si les données étaient pivotées dans l'autre sens.