Oracle select count 시 질문드립니다. 0 4 1,984

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으로 찍어주고 싶은데

어떻게 해야할까요??

by 마농 [2018.05.17 10:21:47]

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
;

 


by visca구루비 [2018.05.17 10:36:06]
SELECT
   STATUS
   , CASE
      WHEN STATUS = '1' THEN COUNT(KEY)
      WHEN STATUS = '2' THEN COUNT(KEY)
   END COUNT_TEST
FROM
   TABLE
GROUP BY SATUS

GROUP BY 부분이 빠졌었네요ㅜㅠ

 

알려주신 부분은 적용해서 해봤는데

row가 나오지 않습니다


by 마농 [2018.05.17 10:41:25]

GROUP BY status 하신다면? CASE 구문은 불필요한 구문입니다.

SELECT status
     , COUNT(*) cnt
  FROM table
 GROUP BY status 
;

 


by 신이만든지기 [2018.05.17 11:19:33]
SELECT status
     , COUNT(*) cnt
  FROM table
 where status in ('1', '2')
 GROUP BY status 
;

where 절이 필요할 수도 있겠네요.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입