by visca구루비 [Oracle 기초] select count key [2018.05.17 10:09:03]
SELECT CASE WHEN STATUS = '1' THEN COUNT(KEY) WHEN STATUS = '2' THEN COUNT(KEY) END COUNT_TEST FROM TABLE
다음과 같이 키값을 COUNT해주는 쿼리문 입니다.
상태값에 따라서 CASE로 해당 상태를 COUNT 해주고 있습니다.
조건에 따라서 SELECT ROW가 없는 경우 0으로 찍어주고 싶은데
어떻게 해야할까요??
1. CASE 와 COUNT 의 포함관계가 거꾸로 작성되었습니다.
- 변경전 : CASE(COUNT)
- 변경후 : COUNT(CASE)
2. COUNT(컬럼) 방식은 그 의미와 성능을 따져봐야 합니다.
- 컬럼에 널이 포함되며 널을 카운트에서 제외시킬때에만 COUNT(컬럼)을 사용합니다.
- 그 외에는 이렇게 사용하면 성능이 저하됩니다.
- 변경전 : COUNT(key)
- 변경후 : COUNT(*) 또는 COUNT(1)
SELECT COUNT(CASE WHEN status = '1' THEN 1 END) cnt_1 , COUNT(CASE WHEN status = '2' THEN 1 END) cnt_2 FROM table ;