소계/합계 함께 보기
조건.
TEST12 에는 다음과 같은 DATA가 있다.
PRESS BOOK_TYPE BOOK_NAME PRICE
------------- ------------- -------------------- ---------
서울 출판사 소설 전원일기 9000
서울 출판사 소설 인간시대 8000
서울 출판사 소설 태백산 10000
서울 출판사 소설 손자병법 7000
서울 출판사 시 접시꽃당신 6000
서울 출판사 시 진다래꽃 7000
서울 출판사 시 윤동주시집 7000
서울 출판사 시 겨울비 7000
서울 출판사 수필 낙엽을태우며 7000
서울 출판사 수필 가을이오면 7000
서울 출판사 수필 어떻게사나 7000
서울 출판사 수필 비오면나는님을그린다 7000
한국출판 교과서 고교국어 9000
한국출판 교과서 중학수학 8000
한국출판 교과서 고교수학 10000
한국출판 교과서 고교물리 7000
한국출판 교과서 지구과학 6000
한국출판 교과서 물리 7000
한국출판 교과서 고전 7000
한국출판 참고서 영어참고 7000
한국출판 참고서 수학참고 7000
한국출판 참고서 국어참고 7000
한국출판 참고서 물리참고 7000
한국출판 참고서 전과 7000
문제.
동일한 DATA를 읽어오되,BOOK_TYPE 별 소계,출판사별 소계,
전체 합계를 보고싶다.
결과물이 다음과 같으면된다.
출 판 사 종 류 책 명 가 격
-------------- --------- ------------------ --------
서울 출판사 소설 손자병법 7000
서울 출판사 소설 인간시대 8000
서울 출판사 소설 전원일기 9000
서울 출판사 소설 태백산 10000
서울 출판사 소설 계 34000
서울 출판사 수필 가을이오면 7000
서울 출판사 수필 낙엽을태우며 7000
서울 출판사 수필 비오면나는님을그린다 7000
서울 출판사 수필 어떻게사나 7000
서울 출판사 수필 계 28000
서울 출판사 시 겨울비 7000
서울 출판사 시 윤동주시집 7000
서울 출판사 시 접시꽃당신 6000
서울 출판사 시 진다래꽃 7000
서울 출판사 시 계 27000
서울 출판사 계 89000
한국출판 교과서 고교국어 9000
한국출판 교과서 고교물리 7000
한국출판 교과서 고교수학 10000
한국출판 교과서 고전 7000
한국출판 교과서 물리 7000
한국출판 교과서 중학수학 8000
한국출판 교과서 지구과학 6000
한국출판 교과서 계 54000
한국출판 참고서 국어참고 7000
한국출판 참고서 물리참고 7000
한국출판 참고서 수학참고 7000
한국출판 참고서 영어참고 7000
한국출판 참고서 전과 7000
한국출판 참고서 계 35000
한국출판 계 89000
합 계 178000
생각.
많이 알려져 있는 방법이다.
여기서는 그 사용 방법 및 원리를 다시한번 익히고 지나가자.
엿보기1.몇번의 DATA READ 가 필요한지 살펴보자.
첫번째 원래 DATA ,두번째 출판사/종류별 계,
세번째 출판사별 계,네번째 합 계,
이렇게 네번의 READ를 통해 원하는 DATA를 가져다
가공하고 원하는 순서대로 배열하면 된다.
엿보기2.네번의 SELECT 를 통해 원하는 단위별로 GROUPING을 하고
원하는 순서대로 배열할 수 있다면
한번 읽은 DATA를 네번의 복제를 통해 GROUPING 하고
원하는 순서대로 배열할 수 있을 것이다.
엿보기3.먼저 출판사(첫번째단계)부터 생각해보자.
합계를 보여주고 싶은 GROUP에서는 '합 계',
출판사별 계를 보여주고싶은 단위에서는 출판사명 || '계',
나머지 경우는 단순히 출판사명 만을 기준으로 GROUP BY 가
일어나면 된다.
엿보기4.다음 책종류(두번째단계)는 어떤가.
출판사/책종류별 GROUP에서는 책종류 || '계',
원DATA에서는 단순한 책종류가 GROUP BY 단위가 되며,
나머지(합계,출판사계)는 이미 첫번째 단계를 통해
GROUPING을 끝냈다.
엿보기5.마지막으로 책명칭(세번째단계)은 어떤가?..
이미 모든 계는 앞단계까지에서 GROUP BY 단위를 결정했고,
이번 단계에서는 원DATA에 책이름을 보여주는데 의미가 있다.
이렇게 GROUP 단위를 지정하고 GROUP BY 하여 SUM만
해주면된다.
해법.
엿보기에 나온 그대로를 SQL문으로 바꿔주면 된다.
더이상의 답은 없다.
우선 FROM 절을 먼저 살펴보면 원 TABLE을 4번복제하기위하여
다음과 같이 돨 것이다.
FROM TEST12 A,
(SELECT ROWNUM RCNT
FROM TEST12
WHERE ROWNUM < 5
) B
단계1.출판사(첫번째단계)는 어떻게 구성되겠는가.
4개의 복제DATA중 2를 합계용으로 3을 출판사소계용으로
가공하고자 한다면 다음과 같이 될것이다.
DECODE(RCNT,2,'합 계',3,PRESS||' 계',PRESS) "출 판 사"
단계2.책종류(두번째단계)에서는 출판사/종류별 계로 사용할
복제번호와 원본DATA로 사용할 복제번호를 결정해줘야 한다.
각각 1과4로 결정한다면 두번째 GROUP BY 단위는
다음과 같이 될것이다.
DECODE(RCNT,1,BOOK_TYPE||' 계',4,BOOK_TYPE) "종 류"
단계3.책명칭(세번째단계)는 간단하다.
DECODE(RCNT,4,BOOK_NAME) "책 명"
이제 할 일이 무엇이 있는가?..
연결만하면 된다.
SELECT DECODE(RCNT,2,'합 계',3,PRESS||' 계',PRESS) "출 판 사",
DECODE(RCNT,1,BOOK_TYPE||' 계',4,BOOK_TYPE) "종 류",
DECODE(RCNT,4,BOOK_NAME) "책 명",
SUM(PRICE) "가 격"
FROM TEST12 A,
(SELECT ROWNUM RCNT
FROM TEST12
WHERE ROWNUM < 5
) B
GROUP BY
DECODE(RCNT,2,'합 계',3,PRESS||' 계',PRESS),
DECODE(RCNT,1,BOOK_TYPE||' 계',4,BOOK_TYPE),
DECODE(RCNT,4,BOOK_NAME)
이게 답이다.
뒷풀이.
여기서는 "합계"가 한글 순서상 다행하게도 제일 뒤에 오는 경우이다.
하지만 출판사중에 '항구출판' 같이 합계보다 순서상 뒤에 위치하게
되면 어쩌나..또는 합계 대신 '계' 만을 쓰고 싶다면 어쩔것인가.
간단하다.
SELECT 첫번째 GROUP BY 단위를 다음처럼 쓰면된다.
DECODE(RCNT,2,1,0)
합계는 1을 갖고 나머지는 0을 가지므로 순서대로 정렬이 일어나
답이 나올 것이다.
조건.
TEST12 에는 다음과 같은 DATA가 있다.
PRESS BOOK_TYPE BOOK_NAME PRICE
------------- ------------- -------------------- ---------
서울 출판사 소설 전원일기 9000
서울 출판사 소설 인간시대 8000
서울 출판사 소설 태백산 10000
서울 출판사 소설 손자병법 7000
서울 출판사 시 접시꽃당신 6000
서울 출판사 시 진다래꽃 7000
서울 출판사 시 윤동주시집 7000
서울 출판사 시 겨울비 7000
서울 출판사 수필 낙엽을태우며 7000
서울 출판사 수필 가을이오면 7000
서울 출판사 수필 어떻게사나 7000
서울 출판사 수필 비오면나는님을그린다 7000
한국출판 교과서 고교국어 9000
한국출판 교과서 중학수학 8000
한국출판 교과서 고교수학 10000
한국출판 교과서 고교물리 7000
한국출판 교과서 지구과학 6000
한국출판 교과서 물리 7000
한국출판 교과서 고전 7000
한국출판 참고서 영어참고 7000
한국출판 참고서 수학참고 7000
한국출판 참고서 국어참고 7000
한국출판 참고서 물리참고 7000
한국출판 참고서 전과 7000
문제.
동일한 DATA를 읽어오되,BOOK_TYPE 별 소계,출판사별 소계,
전체 합계를 보고싶다.
결과물이 다음과 같으면된다.
출 판 사 종 류 책 명 가 격
-------------- --------- ------------------ --------
서울 출판사 소설 손자병법 7000
서울 출판사 소설 인간시대 8000
서울 출판사 소설 전원일기 9000
서울 출판사 소설 태백산 10000
서울 출판사 소설 계 34000
서울 출판사 수필 가을이오면 7000
서울 출판사 수필 낙엽을태우며 7000
서울 출판사 수필 비오면나는님을그린다 7000
서울 출판사 수필 어떻게사나 7000
서울 출판사 수필 계 28000
서울 출판사 시 겨울비 7000
서울 출판사 시 윤동주시집 7000
서울 출판사 시 접시꽃당신 6000
서울 출판사 시 진다래꽃 7000
서울 출판사 시 계 27000
서울 출판사 계 89000
한국출판 교과서 고교국어 9000
한국출판 교과서 고교물리 7000
한국출판 교과서 고교수학 10000
한국출판 교과서 고전 7000
한국출판 교과서 물리 7000
한국출판 교과서 중학수학 8000
한국출판 교과서 지구과학 6000
한국출판 교과서 계 54000
한국출판 참고서 국어참고 7000
한국출판 참고서 물리참고 7000
한국출판 참고서 수학참고 7000
한국출판 참고서 영어참고 7000
한국출판 참고서 전과 7000
한국출판 참고서 계 35000
한국출판 계 89000
합 계 178000
생각.
많이 알려져 있는 방법이다.
여기서는 그 사용 방법 및 원리를 다시한번 익히고 지나가자.
엿보기1.몇번의 DATA READ 가 필요한지 살펴보자.
첫번째 원래 DATA ,두번째 출판사/종류별 계,
세번째 출판사별 계,네번째 합 계,
이렇게 네번의 READ를 통해 원하는 DATA를 가져다
가공하고 원하는 순서대로 배열하면 된다.
엿보기2.네번의 SELECT 를 통해 원하는 단위별로 GROUPING을 하고
원하는 순서대로 배열할 수 있다면
한번 읽은 DATA를 네번의 복제를 통해 GROUPING 하고
원하는 순서대로 배열할 수 있을 것이다.
엿보기3.먼저 출판사(첫번째단계)부터 생각해보자.
합계를 보여주고 싶은 GROUP에서는 '합 계',
출판사별 계를 보여주고싶은 단위에서는 출판사명 || '계',
나머지 경우는 단순히 출판사명 만을 기준으로 GROUP BY 가
일어나면 된다.
엿보기4.다음 책종류(두번째단계)는 어떤가.
출판사/책종류별 GROUP에서는 책종류 || '계',
원DATA에서는 단순한 책종류가 GROUP BY 단위가 되며,
나머지(합계,출판사계)는 이미 첫번째 단계를 통해
GROUPING을 끝냈다.
엿보기5.마지막으로 책명칭(세번째단계)은 어떤가?..
이미 모든 계는 앞단계까지에서 GROUP BY 단위를 결정했고,
이번 단계에서는 원DATA에 책이름을 보여주는데 의미가 있다.
이렇게 GROUP 단위를 지정하고 GROUP BY 하여 SUM만
해주면된다.
해법.
엿보기에 나온 그대로를 SQL문으로 바꿔주면 된다.
더이상의 답은 없다.
우선 FROM 절을 먼저 살펴보면 원 TABLE을 4번복제하기위하여
다음과 같이 돨 것이다.
FROM TEST12 A,
(SELECT ROWNUM RCNT
FROM TEST12
WHERE ROWNUM < 5
) B
단계1.출판사(첫번째단계)는 어떻게 구성되겠는가.
4개의 복제DATA중 2를 합계용으로 3을 출판사소계용으로
가공하고자 한다면 다음과 같이 될것이다.
DECODE(RCNT,2,'합 계',3,PRESS||' 계',PRESS) "출 판 사"
단계2.책종류(두번째단계)에서는 출판사/종류별 계로 사용할
복제번호와 원본DATA로 사용할 복제번호를 결정해줘야 한다.
각각 1과4로 결정한다면 두번째 GROUP BY 단위는
다음과 같이 될것이다.
DECODE(RCNT,1,BOOK_TYPE||' 계',4,BOOK_TYPE) "종 류"
단계3.책명칭(세번째단계)는 간단하다.
DECODE(RCNT,4,BOOK_NAME) "책 명"
이제 할 일이 무엇이 있는가?..
연결만하면 된다.
SELECT DECODE(RCNT,2,'합 계',3,PRESS||' 계',PRESS) "출 판 사",
DECODE(RCNT,1,BOOK_TYPE||' 계',4,BOOK_TYPE) "종 류",
DECODE(RCNT,4,BOOK_NAME) "책 명",
SUM(PRICE) "가 격"
FROM TEST12 A,
(SELECT ROWNUM RCNT
FROM TEST12
WHERE ROWNUM < 5
) B
GROUP BY
DECODE(RCNT,2,'합 계',3,PRESS||' 계',PRESS),
DECODE(RCNT,1,BOOK_TYPE||' 계',4,BOOK_TYPE),
DECODE(RCNT,4,BOOK_NAME)
이게 답이다.
뒷풀이.
여기서는 "합계"가 한글 순서상 다행하게도 제일 뒤에 오는 경우이다.
하지만 출판사중에 '항구출판' 같이 합계보다 순서상 뒤에 위치하게
되면 어쩌나..또는 합계 대신 '계' 만을 쓰고 싶다면 어쩔것인가.
간단하다.
SELECT 첫번째 GROUP BY 단위를 다음처럼 쓰면된다.
DECODE(RCNT,2,1,0)
합계는 1을 갖고 나머지는 0을 가지므로 순서대로 정렬이 일어나
답이 나올 것이다.
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
86 | 중복 data를 찾아 한번만 display하는 방법 | 운영자 | 2002.11.23 | 3429 |
85 | 중복 data를 찾아 모두 display 하는 방법 | 운영자 | 2002.11.23 | 3070 |
84 | oracle의 procedure에서의 여러 리턴값의 활용 예 | 운영자 | 2002.10.18 | 8302 |
83 | 특정문자까지의 왼쪽 문자열 반환 function | 운영자 | 2002.10.18 | 4044 |
82 | 중복자료 확인 및 삭제 | 운영자 | 2002.09.25 | 3260 |
81 | RECORD단위 DATA를 COLUMN단위로 | 운영자 | 2002.09.18 | 3681 |
80 | 누계 COLUMN이 없는 TABLE에 누계 값을 보자 (부등호 JOIN) | 운영자 | 2002.09.18 | 5104 |
79 | 바로이전 ROW의 값을 참조하고자 할때 | 운영자 | 2002.09.18 | 8619 |
78 | 누계 COLUMN이 없는 TABLE에 누계 값을 보자 (IN-LINE VIEW) | 운영자 | 2002.09.18 | 3123 |
77 | 자기보다 작은값중 최대값 하나만 읽어오기 | 운영자 | 2002.09.18 | 4589 |
76 | DATA COPY를 이용한 QUERY | 운영자 | 2002.09.18 | 3186 |
75 | PARAMETER값 변경에따른 유연한 GROUP BY | 운영자 | 2002.09.18 | 4127 |
74 | PAIRWISE 와 NONPAIRWISE | 운영자 | 2002.09.18 | 2697 |
73 | 동일한 값 안보여주기 | 운영자 | 2002.09.18 | 2970 |
» | 소계/합계 함께 보기 | 운영자 | 2002.09.18 | 3134 |
71 | 석차구하기 | 운영자 | 2002.09.18 | 2960 |
70 | COLUMN을 ROW로 | 운영자 | 2002.09.18 | 6135 |
69 | 최대값과 최소값을 뺀 평균 | 운영자 | 2002.09.18 | 4177 |
68 | 누계를 구하는 또한가지 방법 | 운영자 | 2002.09.18 | 3209 |
67 | 그룹 단위별 일련번호 붙이기 | 운영자 | 2002.09.18 | 5754 |