반응형
Oracle: 쿼리를 통해 전체 비율을 얻는 방법은 무엇입니까?
저는 다음과 같은 질문이 있는데 그 결과는 저에게 매우 뜻밖입니다.
select stato, (count(1) *100) / sum(1)
from LOG_BONIFICA
group by stato;
모든 행에 대해 100을 반환합니다.달라야 하나요?
count(1)
와 같음sum(1)
당신의 경우에는
다음과 같은 방법을 사용해 보십시오.
18:39:36 SYSTEM@dwal> ed
Wrote file S:\\tools\buffer.sql
1 select owner,
2 count(*) group_cnt,
3 sum(count(*)) over() total_cnt,
4 round(100*(count(*) / sum(count(*)) over ()),2) perc
5 from dba_objects
6 group by owner
7* order by 4 desc
18:39:57 SYSTEM@dwal> /
OWNER GROUP_CNT TOTAL_CNT PERC
------------------------------ ---------- ---------- ----------
SYS 31609 59064 53.52
PUBLIC 24144 59064 40.88
XDB 1660 59064 2.81
SYSTEM 597 59064 1.01
WMSYS 332 59064 .56
EXFSYS 312 59064 .53
IRKAZDATA 158 59064 .27
STRMADMIN 92 59064 .16
DBSNMP 55 59064 .09
RI 25 59064 .04
PASS 16 59064 .03
POTS 19 59064 .03
TI 11 59064 .02
STRMODS 11 59064 .02
OUTLN 10 59064 .02
APPQOSSYS 5 59064 .01
ORACLE_OCM 8 59064 .01
17 rows selected.
Elapsed: 00:00:00.16
업데이트: 또는 ratio_to_report를 통해 훨씬 더 단순화
18:53:36 SYSTEM@dwal> ed
Wrote file S:\\tools\buffer.sql
1 select owner,
2 round(100*ratio_to_report(count(*)) over (), 2) perc
3 from dba_objects
4 group by owner
5* order by 2 desc
18:54:03 SYSTEM@dwal> /
OWNER PERC
------------------------------ ----------
SYS 53.52
PUBLIC 40.88
XDB 2.81
SYSTEM 1.01
WMSYS .56
EXFSYS .53
IRKAZDATA .27
STRMADMIN .16
DBSNMP .09
RI .04
PASS .03
POTS .03
TI .02
STRMODS .02
OUTLN .02
APPQOSSYS .01
ORACLE_OCM .01
17 rows selected.
Elapsed: 00:00:00.20
다음 사항을 말씀하시는 건가요?당신은 총계를 따로 찾아야 합니다.
- SQLFIDDLE 참조
표:
ID NAME AMOUNT STATE
1 john 1000 fl
2 jane 5000 ga
3 james 2000 ca
4 tom 6000 ga
5 tim 8000 fl
6 jim 2000 ga
7 kate 8000 fl
8 jack 3000 tx
결과 1:
STATE SUM(AMOUNT)
ca 2000
fl 17000
ga 13000
tx 3000
최종 쿼리:
select t1.state, concat(
round(((sum(t1.amount)/t2.total))*100,2),
'%') as pct
from t1,
(select sum(amount) as total from t1) as t2
group by t1.state
;
결과:
STATE COUNT(T1.ID) SUM(T1.AMOUNT) TOTAL PCT
ca 1 2000 35000 5.71%
fl 3 17000 35000 48.57%
ga 3 13000 35000 37.14%
tx 1 3000 35000 8.57%
ratio_to_report 분석 함수 사용:
SELECT STATO,
COUNT(1) STATO_COUNT,
RATIO_TO_REPORT(COUNT(1)) OVER() * 100 STATO_PERCENT
FROM LOG_BONIFICA
GROUP BY STATO
따라서 전체 행 수와 비율을 직접 계산할 필요가 없습니다.
언급URL : https://stackoverflow.com/questions/13721093/oracle-how-to-get-percent-of-total-by-a-query
반응형
'source' 카테고리의 다른 글
xml 없이 Ehcache 3 + 스프링 부트 + Java 구성을 구성하려면 어떻게 해야 합니까? (0) | 2023.07.16 |
---|---|
angular2 테스트를 위해 http 오류를 모의하는 방법 (0) | 2023.07.16 |
Python Logging을 사용하여 두 번 나타나는 로그 메시지 (0) | 2023.07.16 |
Git와 명령줄을 사용하여 병합하는 동안 로컬 파일 또는 원격 파일을 유지하는 방법은 무엇입니까? (0) | 2023.07.16 |
Git: 권한 거부(공개 키) 치명적 - 원격 리포지토리에서 읽을 수 없습니다.Git 저장소를 복제하는 동안 (0) | 2023.07.16 |