Saya tidak berpikir rentang Anda cukup tepat untuk kueri yang Anda tulis, meskipun kata-kata dari tugas tersebut ambigu karena 'antara' inklusif - jadi saat pertanyaannya disusun, skor kredit persis 600 akan muncul di keduanya tanda kurung 'bawah' dan 'rata-rata'. Versi Anda akan menempatkan 600 di braket 'bawah', tetapi masih bisa diperdebatkan di mana seharusnya; Saya pikir itu harus 'rata-rata' dari definisi lain, tetapi tidak jelas. Tidak ada tanda kurung dalam pertanyaan untuk skor kurang dari 500, tetapi jika Anda memiliki salah satunya, maka kode Anda saat ini akan memasukkannya ke dalam tanda kurung 'rata-rata', karena nilainya kurang dari 700 tetapi tidak antara 500 dan 600.
Jadi saya akan menafsirkannya sebagai:
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)
);
Judul pertanyaan Anda mengacu pada ROLLUP, dan untuk mendapatkan total baris Anda dapat menggunakan fungsi itu:
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);
Jika Anda memiliki skor di bawah 500, Keduanya akan menyertakan baris untuk mereka yang memiliki creditscore_range
sebagai nol; yang membingungkan dengan ROLLUP
Versi:kapan. Anda mungkin ingin memfilter skor apa pun yang kurang dari 500 dari kueri terdalam, tetapi sekali lagi tidak jelas apakah itu perlu atau diinginkan.
Saya tidak yakin bahwa tugas sedang dicari ketika berbicara tentang peringkat. Itu berarti mengubah urutan kolom berdasarkan nilai yang dikandungnya. Peringkat menurut negara bagian akan lebih masuk akal jika data diputar ke arah lain.