2012-10-25 14 views
6

Ho una tabellaPostgreSQL - determinazione della percentuale di un totale

ID | NUMBER 
------|---------- 
1  |  102 
2  |  145 
3  |  512 
4  |  231 
5  |  94 

e voglio sommare all 'NUMERO' e restituire un valore% dall importo totale a ogni riga. risultato dovrebbe assomigliare a questo:

ID | NUMBER | PERC 
------|--------------|------- 
1  |  102  | 9.4 
2  |  145  | 13.4 
3  |  512  | 47.2 
4  |  231  | 21.3 
5  |  94  | 8.7 

Finora, ho qualcosa di simile:

SELECT (number/sum(number)*100) AS perc 
FROM mytable; 

ma come si sa per certo, che 'numero' deve apparire in GROUP BY o funzione di aggregazione in modo da non posso usarlo Come farlo?

risposta

18

Si potrebbe usare sum con una clausola over:

SELECT 100.0 * number/sum(number) over() as perc 
FROM mytable; 

Example at SQL Fiddle.

+1

come si potrebbe proteggere quella contro la divisione per zero errori? –

Problemi correlati