2014-10-16 57 views
0

有這個疑問:如何插入新行的百分比

select t.cod_provincia as prov, COUNT(t.cod_provincia) as conto 
from clienti t 
where t.data_ins between to_date(&da_data,'ddmmrr') and to_date(&a_data,'ddmmrr') 
and t.cod_iso='ITA' 
group by t.cod_provincia 

返回

enter image description here

現在我想要一個新的關口以百分比來查看CONTO值的每一行。我可以做嗎? 對於每一行我想要的值[CONTO*100]/SUM(CONTO)

+0

您正在使用哪些DBMS?甲骨文? – 2014-10-16 10:37:05

+0

@a_horse_with_no_name是的,但是你可以向我解釋SQL標準 – padibro 2014-10-16 10:40:36

回答

1
select pov, conto*100/sum(conto) over() 
    from (
     select t.cod_provincia as prov, COUNT(t.cod_provincia) as conto 
     from clienti t 
     where t.data_ins between to_date(&da_data,'ddmmrr') and to_date(&a_data,'ddmmrr') 
      and t.cod_iso='ITA' 
     group by t.cod_provincia 
     ) 
+0

謝謝!這行得通! – padibro 2014-10-16 11:01:45

-1
SELECT t.cod_provincia  AS prov, 
     Count(t.cod_provincia) AS conto, 
     (Count(t.cod_provincia) * 100)/Sum(cod_provincia) 
FROM clienti t 
WHERE t.data_ins between to_date(&da_data,'ddmmrr') and to_date(&a_data,'ddmmrr') 
and t.cod_iso = 'ITA' 
GROUP BY t.cod_provincia 
+0

中的邏輯解決方案無效。我嘗試'(Count(t.cod_provincia)* 100)/ Sum(t.cod_provincia)''但我有一個錯誤 – padibro 2014-10-16 11:00:48

0

Oracle有一個內置的,可以用來作爲一種替代生鏽的解決方案解析函數RATIO_TO_REPORT:

select t.cod_provincia as prov, 
     count(t.cod_provincia) as conto, 
     100*RATIO_TO_REPORT(count(t.cod_provincia)) OVER() as percentage 
from clienti t 
where t.data_ins between to_date(&da_data,'ddmmrr') and to_date(&a_data,'ddmmrr') 
and t.cod_iso='ITA' 
group by t.cod_provincia 

它給出了同樣的結果,但避免重複一個表達式作爲分子和分母內的總和。而且您不必擔心可能會被零錯誤分割。