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
운영게시판
최근게시물
DB2 Q&A 1603 게시물 읽기
No. 1603
입력되지 않은 유형값을 보여주는 통계쿼리 질문입니다.
작성자
이남식
작성일
2008-05-18 18:15
조회수
10,042

게시판유형과 세부유형 그리고 상태값을 갖는 게시판의 통계를 구하려고 합니다.

 

==================================================================

게시판유형 // 세부유형 // 상태값(a+b+c) // 상태값 (b) // 상태값(c)

------------------------------------------------------------------

A 1 5 1 3

------------------------------------------------------------------

. . . . .

------------------------------------------------------------------

. . . . .

. . . . .

. . . . .

==================================================================

 

위와 같은 결과를 내려고 아래와 같은 쿼리를 작성했습니다.

 

================================================================================

SELECT A.BOARDTYPE

, A.DETAILTYPE, COALESCE(COUNT(*), 0) AS STATE

, COALESCE(B.STATE, 0) AS STATE1

, COALESCE(C.STATE, 0) AS STATE2

 

FROM WEB_BOARD A

 

LEFT OUTER JOIN (SELECT BOARDTYPE, DETAILTYPE, COUNT(*) STATE

FROM WEB_BOARD

WHERE STATE = 2

AND BOARDTYPE IS NOT NULL

AND DETAILTYPE IS NOT NULL

AND REGION IS NOT NULL

AND COMPANYNAME IS NOT NULL

AND BOARDID = NID

GROUP BY BOARDTYPE, DETAILTYPE) B

ON A.BOARDTYPE = B.BOARDTYPE AND A.DETAILTYPE = B.DETAILTYPE

 

LEFT OUTER JOIN (SELECT BOARDTYPE, DETAILTYPE, COUNT(*) STATE

FROM WEB_BOARD

WHERE STATE = 3

AND BOARDTYPE IS NOT NULL

AND DETAILTYPE IS NOT NULL

AND REGION IS NOT NULL

AND COMPANYNAME IS NOT NULL

AND BOARDID = NID

GROUP BY BOARDTYPE, DETAILTYPE) C

ON A.BOARDTYPE = C.BOARDTYPE AND A.DETAILTYPE = C.DETAILTYPE

 

WHERE A.STATE Is Not NULL

And A.REGION Is Not NULL

And A.COMPANYNAME Is Not NULL

AND A.BOARDTYPE IS NOT NULL

AND A.DETAILTYPE IS NOT NULL

AND A.BOARDID = A.NID

 

GROUP BY A.BOARDTYPE, A.DETAILTYPE, B.STATE, C.STATE

ORDER BY A.BOARDTYPE, A.DETAILTYPE

================================================================================

 

이 쿼리로 결과값이 나오기는 하는데.

문제는 없는 유형에대해서도 0 값을 받아야 하는데

어찌해야할지 몰라 계속 해메고 있습니다.

조금만 도와주세요...ㅜㅜ

 

아래와같은 유형이 있을때,

****************************

게시물유형 A , B , C

세부유형 1 , 2 , 3

****************************

 

원하는 결과는 이건데.

============================================

A 1 5 3 1

2 0 0 0

3 4 0 3

B 1 0 0 0

2 3 2 0

3 4 2 2

C 1 0 0 0

2 7 1 4

3 4 2 0

============================================

 

지금은 이렇게 나와요.

============================================

A 1 5 3 1

3 4 0 3

B 2 3 2 0

3 4 2 2

C 2 7 1 4

3 4 2 0

============================================

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

잘 이해가 안되는데요.. 

조는 냥이님이 2008-05-19 09:08에 작성한 댓글입니다. Edit

A,B,C 라는 유형이 각각 1,2,3 이라는 세부유형을 갖고 있습니다.
널값이 없이 입력되는 값이고 상태값은 작성시 1이라는 값이 들어값니다.

그리하여 각 유형의 세부유형별로 각각의 상태값의 카운트를 보려고 하는건데요
ex)유형 A - 세부유형 1 - (상태값 is not null) 5 - (상태값 = 2) 2 - (상태값 = 3) 1

모든 유형의 각 세부유형까지 모든 종류의 글이 하나이상이 있다면 결과는 원하는데로 나오는데요
A란 유형의 2라는 세부유형을 갖는 게시물이 없으면 
A - 1 다음에 A - 3 이 나오게 되는데요
이 사이에  A - 2 라는 유형의 상태값을 0 0 0 으로 보여주고 싶습니다. 

이 없는 유형을 보여주는 방법을 못찾아 헤메고 있습니다.

이남식님이 2008-05-19 15:03에 작성한 댓글입니다. Edit

db2 "select * from web_board"

BOARDTYPE DETAILTYPE  STATE     
--------- ----------- -----------
A                   1           2
A                   1           2
A                   1           3
A                   3           3
B                   1           2
B                   1           2
B                   2           2
B                   2           2
B                   2           3
C                   1           3
C                   1           2
C                   3           2

with t1 (c1,c2,c3,c4,c5) as ( values
('A',1,0,0,0),
('A',2,0,0,0),
('A',3,0,0,0),
('B',1,0,0,0),
('B',2,0,0,0),
('B',3,0,0,0),
('C',1,0,0,0),
('C',2,0,0,0),
('C',3,0,0,0))

select case when BOARDTYPE is not null then BOARDTYPE else c1 end,
       case when DETAILTYPE is not null then DETAILTYPE else c2 end,
       case when state is not null then state else c3 end,
       case when stat1 is not null then stat1 else c4 end,
       case when stat2 is not null then stat2 else c5 end
from (
select BOARDTYPE,DETAILTYPE,count(*) state,
       count(case when state=2 then state end) stat1,
       count(case when state=3 then state end) stat2
  from web_board
group by BOARDTYPE,DETAILTYPE) t2
 right join t1
    on BOARDTYPE =c1
   and DETAILTYPE=c2
order by c1,c2 ;

1 2           3           4           5         
- ----------- ----------- ----------- -----------
A           1           3           2           1
A           2           0           0           0
A           3           1           0           1
B           1           2           2           0
B           2           3           2           1
B           3           0           0           0
C           1           2           1           1
C           2           0           0           0
C           3           1           1           0

조는 냥이님이 2008-05-19 17:34에 작성한 댓글입니다. Edit

정말 대단하세요...^^
한편으로 제가 너무 무능해 보이네요...
몇일을 고민해도 해결 못하고 있었는데...ㅜㅜ

좀더 열심히 공부해야겠네요~ ^^

감사합니다.^^

이남식님이 2008-05-19 17:45에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
1606JDBC를 사용해서 DB2에 인서트 하려고 합니다. [1]
DB2
2008-05-20
11312
1605테이블의 row 수 아는 방법 [1]
김민희
2008-05-19
9992
1604cli함수에서 다중 커넥션 [1]
이도희
2008-05-19
9800
1603입력되지 않은 유형값을 보여주는 통계쿼리 질문입니다. [4]
이남식
2008-05-18
10042
1602sql에서 정규 표현식을 사용하고 싶은데요...
배성수
2008-05-14
11317
1600외부 프로시저 질문 드립니다. [1]
이도희
2008-05-13
9577
1597터미널상에서 insert 쿼리를 직접 처리할 수 없을까요??? [2]
눈이
2008-04-27
10596
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.056초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다