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 39398 게시물 읽기
No. 39398
고수님들께 질문드리고자 합니다... 소계 관련된 질문인데요..
작성자
박정우(ppi1234)
작성일
2012-04-12 16:37
조회수
4,387

RN date product brand1 brand2 per1 per2 result num avg
1 2012.03 Ref AEG AR 33.3 50 25 5 4.3
2 2012.03 Ref BEKO            
3 2012.03 Ref              
1 2012.04 Ref LG SS 100 100 5 2 5
1 2012.03 WM AEG BRAST 66 33 12 3 4
2 2012.03 WM   LG   33     4
1 2012.04 WM BEKO BOSCH 100 100 3 2 3

안녕하세요. 도저히 해결이 안되서 고수님들께 도움을 받고자 합니다.

위 그림이 현재 쿼리 데이타 이구요.

아래그림과 같은 데이타를 얻고자 합니다.

RN date product brand1 brand2 avg1 avg2 result num avg
1 2012.03 Ref AEG AR 50 50 25 5 5
2 2012.03 Ref BEKO            
3 2012.03 Ref              
1 2012.04 Ref LG SS 100 100 5 2 5
    total LG SS 75 75 30 7 5
1 2012.03 WM AEG BRAST 50 50 12 3 4
2 2012.03 WM   LG 50 50     4
1 2012.04 WM BEKO BOSCH 100 100 3 2 2
    total AEG LG 75 75 15 5 2
                   

문제는,  RN이 1이 아닌 값들은 소계로 적용될 필요가 없습니다.

즉, date, product로 rollup을 하여 원하는 소계를 추출하고 싶은데.. RN이 1,2,3.. 가변적으로 생길 수 있기에..RN때문에

원하는 소계를 만들 수 없네요.. 고수님들의 답변 부탁드리겠습니다. 감사합니다.ㅠㅠ

 

 

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

결과데이터셋에서 브랜드1과 브랜드2 소계값은 어떠한 기준으로 나오는지?

첫번째 소계만 보자면 max값인것 같기도하고 두번째 소계만 보면 min값인것 같기도 하네요..

그리고 마지막에 있는 avg컬럼. 두번째 소계부분에 3이 나와야될꺼 같은데 왜 2가 나오는지?

...님이 2012-04-13 10:40에 작성한 댓글입니다. Edit

브랜드1,브랜드2의 소계값은 어느것이든 상관없습니다.

단지, 숫자값들에 대한 평균, 합만 소계로 표현되면 되는데요, RN이 1인 값에 대한 date, product으로

rollup을 적용하면 되는데, RN, 2,3..으로 나오게 되는 목록들땜시 소계가 제대로 표현이 안되더라구요.ㅠㅠ

그렇다고 RN,2,3..으로 나오는 목록도 필요는 하거든요.. ㅜㅜ

그리고 avg컬럼 두번째 부분은 제가 직접 입력한거라 실수한 것 같습니다. 3이 맞습니다^^ 

박정우(ppi1234)님이 2012-04-13 11:25에 작성한 댓글입니다.

WITH t(rn, dat, product, brand1, brand2, per1, per2, result, num, avg) AS
(
          SELECT 1, '2012.03', 'Ref', 'AEG' , 'AR'   ,   50,   50,   25,    5,    5 FROM dual
UNION ALL SELECT 2, '2012.03', 'Ref', 'BEKO', ''     , null, null, null, null, null FROM dual
UNION ALL SELECT 3, '2012.03', 'Ref', ''    , ''     , null, null, null, null, null FROM dual
UNION ALL SELECT 1, '2012.04', 'Ref', 'LG'  , 'SS'   ,  100,  100,    5,    2,    5 FROM dual
UNION ALL SELECT 1, '2012.03', 'WM' , 'AEG' , 'BRAST',   50,   50,   12,    3,    4 FROM dual
UNION ALL SELECT 2, '2012.03', 'WM' , ''    , 'LG'   ,   50,   50, null, null,    4 FROM dual
UNION ALL SELECT 1, '2012.04', 'WM' , 'BEKO', 'BOSCH',  100,  100,    3,    2,    2 FROM dual
)
SELECT rn, dat, product, brand1, brand2
     , AVG(per1)   avg1
     , AVG(per2)   avg2
     , SUM(result) result
     , SUM(num)    num
     , AVG(avg)    avg
  FROM t
 GROUP BY rn, product, ROLLUP((dat, brand1, brand2))
HAVING rn = 1 OR GROUPING(dat) = 0
 ORDER BY product, dat, rn
;

마농(manon94)님이 2012-04-13 13:05에 작성한 댓글입니다.

마농님.. ㅠㅠ 그냥 감탄밖에는.. 번번히 마농님께 가르침을 받습니다.

나중에 기회가 된다면 저녁이라도 대접해드리겠습니다.ㅠㅠ

감사드립니다.!^^

박정우(ppi1234)님이 2012-04-13 13:43에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
39403. [1]
다른남자
2012-04-16
3402
39401트리거 테이블 복제후 원본 삭제 방법 [1]
김석훈
2012-04-14
3175
39400오라클통계자료뽑기 [2]
구름이
2012-04-13
3416
39398고수님들께 질문드리고자 합니다... 소계 관련된 질문인데요.. [4]
박정우
2012-04-12
4387
39396ms-sql row 복재 connect by level < ? 기능 여부
nightbobo
2012-04-12
3270
39395정렬 관련 문의드립니다. [2]
박정우
2012-04-12
3266
39394선택된 항목 삭제 방법 궁금해요
축구
2012-04-12
3229
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다