GROUP BY 절 관련 쿼리 질문좀 드립니다. 0 3 2,255

by 구기웅 [SQL Query] GROUP BY [2015.04.14 19:31:26]


안녕하세요 매번 도움만 받고 있는 초보 개발자입니다.

GROUP BY 절을 사용하여서 해당 시간에 대한 카운트를 세고 있습니다.

헌대 View 쪽으로 넘겨줄때 해당 값이 없으면 0 을 처리 해줘야 하는대 로직 쪽에서 처리하려고 했으나 db로 처리 해서 한번에 넘기는 방법을 구글링 하는대 검색어가 마땅치 않아서 여쭤 봅니다.

 

SELECT
	COUNT(1) CNT,
	TO_CHAR(REG_DT, 'HH24') AS REG_DT_TM
FROM VB_STAT_USERAGENT
GROUP BY TO_CHAR(REG_DT, 'HH24')

해당 쿼리까지 상태 이구요 해당 REG_DT_TM 에서 0~23 까지 모든 로우가 나오며 해당 로우에 CNT 가 없을경우 0 으로 표기를 하는 쿼리를 만들고 싶습니다.

 

현제는 당연히 없는 값은 안나오고 있구요..

해결책을 주시는것도 좋지만 해당 부분이라던지 아직 DB에 대해 많이 무지 한지라 어느 카테고리 부분에 대한 공부나 서치를 해보면 좋을지 팁을 주셔도 감사할거 같습니다. 

 

by jkson [2015.04.15 08:03:05]
SELECT a.tm
     , NVL(b.cnt, 0)
  FROM (SELECT 0 + LEVEL - 1 tm
          FROM DUAL
       CONNECT BY LEVEL < 25) a
     , (SELECT COUNT (1) cnt
             , TO_CHAR (reg_dt, 'HH24') AS reg_dt_tm
          FROM vb_stat_useragent
         GROUP BY TO_CHAR (reg_dt, 'HH24')) b
 WHERE a.tm = b.reg_dt_tm(+)
 ORDER BY a.TM

 


by 구기웅 [2015.04.15 11:28:35]

감사합니다 !


by 창조의날개 [2015.04.15 11:19:27]

SELECT SUM(CNT) CNT, REG_DT_TM
FROM (
      SELECT 0 CNT, TO_CHAR(ROWNUM-1,'00') REG_DT_TM
      FROM DUAL 
      CONNECT BY LEVEL <= 24
      UNION ALL
      SELECT
          COUNT(1) CNT,
          TO_CHAR(REG_DT, 'HH24') AS REG_DT_TM
      FROM VB_STAT_USERAGENT
      )
GROUP BY REG_DT_TM
;

 

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