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 40079 게시물 읽기
No. 40079
그룹으로 묶을때 조언 부탁드립니다.
작성자
이민우
작성일
2013-03-29 09:39
조회수
7,346

select yyyymm
     , emp_num
     , sum(amount) over(partition by yyyymm) total_val
     , sum(amount) over(partition by yyyymm, emp_num) per_val
from amount_month

위 쿼리는 개인별 백분율을 구하기 위해서 tot_val은 전체 합계, per_val은 개인별 합계를 구한것인데요..

문제는 쿼리를 해보면 개인별로 집계가 되지 않고 전체 데이터 건수만큼 중복해서 데이터가 조회됩니다.

어떻게해야 데이터가 중복되지 않고 나오게 할수있나요?

한번더 감싸서 쿼리르 날려야 하나요? 조언 부탁드립니다.

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

-- 사용하신 쿼리는 분석함수입니다만...
-- per_val 을 구하려면 분석함수가 아닌 집계함수를 사용하셔야 합니다.
-- total_val 은 분석함수를 사용 하시면 되구요.
-- 백분율을 구하기 위해 전체와 개별로 각각 구할 필요 없이
-- Ratio_to_report 분석함수를 사용하셔도 됩니다.
SELECT yyyymm, emp_num
     , SUM(amount) per_val
     , SUM(SUM(amount)) OVER(PARTITION BY yyyymm) total_val
     , SUM(amount)
     / SUM(SUM(amount)) OVER(PARTITION BY yyyymm)
     * 100 r_1
     , RATIO_TO_REPORT(SUM(amount)) OVER(PARTITION BY yyyymm) * 100 r_2
  FROM amount_month
 GROUP BY yyyymm, emp_num
 ORDER BY yyyymm, emp_num
;
-- 합계표시를 컬럼이 아닌 별도 레코드로 빼고 싶다면?
-- Rollup 을 이용하시면 됩니다.
SELECT yyyymm, emp_num
     , SUM(amount) amount
     , RATIO_TO_REPORT(SUM(amount)) OVER(
       PARTITION BY yyyymm, GROUPING(emp_num)
       ) * 100 rate
  FROM amount_month
 GROUP BY yyyymm, ROLLUP(emp_num)
 ORDER BY yyyymm, emp_num
;

마농(manon94)님이 2013-03-29 11:29에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
40082oracle database 10g express 실행관련 질문좀 드릴게요 ㅜ
우종윤
2013-04-02
5704
40081실행계획이 이상하네요 ㅜㅜ;; [5]
하람
2013-04-01
5981
40080split 관련 문의입니다 (칼럼 내용 split 후 각각 레코드로 insert) [1]
푸하
2013-03-29
7190
40079그룹으로 묶을때 조언 부탁드립니다. [1]
이민우
2013-03-29
7346
40078날짜 파라메터 값을 통해서 데이터 출력 [4]
바램
2013-03-28
6798
400772가지 질문..ㅠ [4]
임서희
2013-03-28
6325
400769i export 11g import .. 문제. [2]
이유창
2013-03-28
6818
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다