database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 39022 게시물 읽기
No. 39022
GROUP BY 관련해서..
작성자
카라(karav)
작성일
2011-10-31 10:22
조회수
4,580

GROUP BY하면 칼럼에 있는 값만 그룹핑되자나요. 없는값은  COUNT(*) = 0으로 나오기해서 만들어주고싶은데,

방법있을까요? 칼럼A는 유형이 100가지 이상입니다.

예를 들면,

칼럼A  |  칼럼B  | 

1             1

2             1

4             1

4             1

9             1

:

100

 

SELECT 칼럼A, COUNT(*) FROM TABLE GROUP BY 칼럼A;

결과>

칼럼A | COUNT(*)

1           1

2           1

4           2

9           1

:

100

원하는 결과는

칼럼A | COUNT(*)

1           1

2           1

3           0

4           2

5           0

6           0

7           0

8           0

9           1

:

100

이 글에 대한 댓글이 총 2건 있습니다.

 WITH TB AS (

select '1' AS A, '1' AS B FROM DUAL UNION ALL
select '4' AS A, '1' AS B FROM DUAL UNION ALL
select '6' AS A, '1' AS B FROM DUAL UNION ALL
select '9' AS A, '1' AS B FROM DUAL UNION ALL
select '10' AS A, '1' AS B FROM DUAL UNION ALL
select '44' AS A, '1' AS B FROM DUAL UNION ALL
select '55' AS A, '1' AS B FROM DUAL UNION ALL
select '80' AS A, '1' AS B FROM DUAL UNION ALL
select '91' AS A, '1' AS B FROM DUAL 
)
SELECT B.A , COUNT(A.A) AS CNT
FROM 
TB A,
(select level  AS A
from dual
connect by level < 101
) B
WHERE
A.A(+) = B.A
GROUP BY B.A
ORDER BY B.A;
 
1~100 까지라는 가상의 이름을 만들어서 
조인합니다. COUNT는 미리 하고 level 로 만들어진 가상이 1~100까지를 
조인하는게 좋겠내요. 
 
 WITH TB AS (
select '1' AS A, '1' AS B FROM DUAL UNION ALL
select '4' AS A, '1' AS B FROM DUAL UNION ALL
select '4' AS A, '1' AS B FROM DUAL UNION ALL
select '9' AS A, '1' AS B FROM DUAL UNION ALL
select '10' AS A, '1' AS B FROM DUAL UNION ALL
select '44' AS A, '1' AS B FROM DUAL UNION ALL
select '55' AS A, '1' AS B FROM DUAL UNION ALL
select '80' AS A, '1' AS B FROM DUAL UNION ALL
select '91' AS A, '1' AS B FROM DUAL 
)
SELECT B.A , NVL(A.CNT,0) AS CNT
FROM 
(SELECT A,COUNT(*) AS CNT
FROM TB
GROUP BY A
) A RIGHT OUTER JOIN
(select level  AS A
from dual
connect by level < 101
) B
ON B.A = A.A
 
 
cReAm(catz)님이 2011-10-31 10:30에 작성한 댓글입니다.
이 댓글은 2011-10-31 10:37에 마지막으로 수정되었습니다.

멋진데요. 도움많이 되었습니다. 감사합니다.

카라(karav)님이 2011-10-31 11:37에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
39026엑셀에서 DB로... 케릭터셋질문입니다. [3]
....
2011-11-01
6169
39025낮에 질문 올리신 분 계신 것 같은데... 글이 삭제 되버린 것 같네요. 원하시는게 아래 쿼리 맞는지 모르겠습니다.
아무거나
2011-10-31
4733
39024Oracle "_B_TREE_BITMAP_PLANS" 파라메터 설정방법 [2]
Yoda
2011-10-31
4997
39022GROUP BY 관련해서.. [2]
카라
2011-10-31
4580
39021sql 질문드립니다. [5]
초보
2011-10-30
4026
39016초보자 급질문 드립니다. [2]
제로
2011-10-28
3519
39015date 컬럼에 타임존 정보도 저장이 되나요? [1]
조동건
2011-10-28
4601
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다