2012-12-05 13 views
10

मेरे पास निम्न प्रश्न है। और रिटर्न यह परिणाम बहुत unespected हैं:ओरेकल: एक प्रश्न से कुल प्रतिशत कैसे प्राप्त करें?

select stato, (count(1) *100)/sum(1) 
from LOG_BONIFICA 
group by stato; 

यह रिटर्न 100 सभी पंक्तियों

+1

आप क्या उम्मीद करते हैं? – nhahtdh

+0

गिनती() और योग() में कॉलम नाम निर्दिष्ट करें .. –

+0

@ Gik25: बस अपनी क्वेरी में स्टेटो का चयन करें, गिनती करें (1), योग (1) ', तो आपको पता चलेगा कि आप क्यों प्राप्त कर रहे हैं प्रत्येक पंक्ति के लिए 100.और आप हमें बता सकते हैं कि आप गिनती (1) और योग (1) –

उत्तर

40

count(1) के लिए अपने मामले में sum(1) के बराबर है।

इस तरह की कोशिश कुछ:

18:39:36 [email protected]> 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 [email protected]>/

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 [email protected]> 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 [email protected]>/

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 
+0

सुपर उत्तर से क्या उम्मीद करेंगे !!! तो +1 – vijikumar

+0

+1 यह अच्छा है और यह ऑरैकल में है। महान एक। – bonCodigo

2

आप निम्नलिखित की चर्चा करते हुए कर रहे हैं के साथ? आपको कुल मिलाकर कुछ अलग-अलग खोजने की आवश्यकता है।

तालिका:

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% 
0

उपयोग ratio_to_report विश्लेषणात्मक समारोह:

SELECT STATO, 
    COUNT(1) STATO_COUNT, 
    RATIO_TO_REPORT(COUNT(1)) OVER() * 100 STATO_PERCENT 
FROM LOG_BONIFICA 
GROUP BY STATO 

ताकि आप कुल पंक्ति संख्या और अपने आप अनुपात की गणना की जरूरत नहीं है।

संबंधित मुद्दे