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 40717 게시물 읽기
No. 40717
통계성 화면
작성자
궁금
작성일
2015-02-11 11:42
조회수
7,569


with t as (
select '가' a ,  'A'  b , 'a'  c , 100
from dual
union all
select '나' a ,  'B'  b , 'g'  c , 200
from dual
union all
select '나' a ,  'B'  b , 'h'  c , 100
from dual
union all
select '다' a ,  'C'  b , 'h'  c , 100
from dual
)

위형태로 VIEW가 있습니다...

원하는 화면은,,

가/나 *100의값




나+다의 합
으로 구하려합니다..


가/나 *100의값 과,
가 나 나 다 (그대로 의값을   뿌려주는..) ,
나+다 의 합 을 각각 UNION ALL로하니 속도가 너무느려지네요....

UNION ALL로 그 VIEW에 세번 접근하는거말고 다른방법없을까요?

(나는 두줄일수도있고 여러줄일수도 있고 유동적입니다..)

 

 

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

-- 1. UNION ALL
SELECT '' a, '' b, '' c
     , ROUND(SUM(DECODE(a, '가', d)) / SUM(DECODE(a, '나', d)) * 100, 2) d
  FROM t
 WHERE a IN ('가', '나')
 UNION ALL
SELECT *
  FROM (SELECT a, b, c, d FROM t ORDER BY a, b, c)
 UNION ALL
SELECT '' a, '' b, '' c
     , SUM(d) d
  FROM t
 WHERE a IN ('나', '다')
;


-- 2. ROLLUP 에서 상수값 1 이용
SELECT a, b, c
     , NVL(d, DECODE(GROUPING(1)
     , 0, ROUND(SUM(DECODE(a, '가', d)) / SUM(DECODE(a, '나', d)) * 100, 2)
     , 1, SUM(CASE WHEN a IN ('나', '다') THEN d END)
     ) ) d
  FROM t
 GROUP BY ROLLUP(1, (a, b, c, d))
 ORDER BY GROUPING(1), a NULLS FIRST, b, c
;


-- 3. 분석함수를 이용해 값을 구한 뒤 ROLLUP 이용
SELECT a, b, c
     , COALESCE(d, e, f) d
  FROM (SELECT a, b, c, d
             , ROUND( SUM(DECODE(a, '가', d)) OVER()
                    / SUM(DECODE(a, '나', d)) OVER()
                    * 100, 2) e
             , SUM(CASE WHEN a IN ('나', '다') THEN d END) OVER() f
          FROM t
        )
 GROUP BY f, ROLLUP(e, (a, b, c, d))
 ORDER BY GROUPING(e), a NULLS FIRST, b, c
;


-- 4. Model 절 이용
SELECT a, b, c, d
  FROM t
 MODEL
 DIMENSION BY (ROW_NUMBER() OVER(ORDER BY a, b, c) rn, a)
 MEASURES (b, c, d)
 RULES
 ( d[ 0, ''] = ROUND(SUM(d)[ANY, '가'] / SUM(d)[ANY, '나'] * 100, 2)
 , d[99, ''] = SUM(d)[ANY, a IN ('나', '다')]
 )
 ORDER BY rn
;

마농(manon94)님이 2015-02-11 14:21에 작성한 댓글입니다.
이 댓글은 2015-02-11 15:33에 마지막으로 수정되었습니다.

역시 마농님

감사합니다.ㅠ

 

글쓴이님이 2015-02-11 15:21에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
40720오라클 ORA-28232, ORA-06512 오류문제 (cryptit) [1]
최진호
2015-02-20
9390
40719insert 성능질문 [2]
게르만족
2015-02-16
8042
40718최신 데이터를 사용하는 쿼리 질문드립니다. [3]
newbnewb
2015-02-12
6916
40717통계성 화면 [2]
궁금
2015-02-11
7569
40716특정문자를 비교할려고하는데요.. [2]
질문이요
2015-02-11
7084
40715쿼리 문의드립니다. [2]
초초초
2015-02-10
7464
40711오라클 테이블 두개 COUNT 연산 관련하여 질문드립니다 [1]
최효석
2015-02-06
7638
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.024초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다