Tôi không nghĩ rằng phạm vi của bạn hoàn toàn phù hợp với truy vấn bạn đã viết, mặc dù từ ngữ của bài tập không rõ ràng vì 'giữa' là bao gồm - vì vậy khi câu hỏi được viết, điểm tín dụng chính xác là 600 sẽ xuất hiện trong cả hai dấu ngoặc "thấp hơn" và "trung bình". Phiên bản của bạn sẽ đặt 600 trong khung 'thấp hơn', nhưng nó còn gây tranh cãi nên đặt nó ở đâu; Tôi nghĩ rằng nó phải là 'trung bình' so với các định nghĩa khác, nhưng nó không rõ ràng. Không có dấu ngoặc nào trong câu hỏi cho điểm dưới 500, nhưng nếu bạn có bất kỳ điểm nào trong số đó thì mã hiện tại của bạn sẽ đưa chúng vào khung 'trung bình', vì chúng nhỏ hơn 700 chứ không phải từ 500 đến 600.
Vì vậy, tôi đã giải thích điều đó là:
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)
);
Tiêu đề câu hỏi của bạn đề cập đến ROLLUP và để có tổng hàng, bạn có thể sử dụng hàm đó:
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);
Nếu bạn có bất kỳ điểm nào dưới 500 thì Cả hai sẽ bao gồm một dòng cho những người có creditscore_range
as null; gây nhầm lẫn với ROLLUP
phiên bản. Bạn có thể muốn lọc bất kỳ điểm nào nhỏ hơn 500 ra khỏi truy vấn trong cùng, nhưng một lần nữa, không rõ điều đó có cần thiết hay mong muốn hay không.
Tôi không chắc rằng bài tập đang tìm kiếm khi nó nói về xếp hạng. Điều đó ngụ ý thay đổi thứ tự cột dựa trên các giá trị mà chúng chứa. Xếp hạng theo tiểu bang sẽ có ý nghĩa hơn nếu dữ liệu được xoay vòng theo cách khác.