2009-11-22 12 views
6

Utilizzando PostgreSQL, supponendo una tabella come la seguente:Postgres espressione matematica calculcated per ogni riga nella tabella

12184 |    4 |   83 
12183 |    3 |   171 
12176 |    6 |   95 

Come posso calcolare un'espressione matematica per ogni riga della tabella?

Ad esempio, per dividere colonna 2 per colonna 3, in modo tale che l'output sarà:

12184 | 0.04819277108 
12183 | 0.01754385965 
12176 | 0.06315789474 

istinto era di provare:

SELECT col1, col2/col3 FROM table_name; 

Ma che restituire il soffitto (es. arrotondato verso il basso) parte intera, ho bisogno del valore in virgola mobile.

risposta

9

tipico trucco getto necessari perché col2 e col3 sono interi (così risultato è per default un intero)

select col1, col2/col3*1.0 from table 

o

select col1, col2/col3::float from table 

o (SQL modo standard)

select col1, col2/cast(col3 as float) from table 
+0

Grazie mille a tutti. Ho effettivamente utilizzato quanto segue: SELECT col1, cast (col2 come float)/cast (col3 come float) FROM table; C'è qualche ragione per preferire un modo opposto ad un altro? – nwb

+0

Vedere http://www.postgresql.org/docs/8.4/interactive/typeconv.html per i dettagli. In effetti preferisco la tua strada, dato che è standard, la forma :: type è un'estensione PostgreSQL. –

+0

E, come puoi vedere dai miei esempi, puoi scartare solo il denominatore. –

0
select col1, col2/col3 from table; 

Dovrebbe funzionare. Non sono numerico col2 e col3?

+0

Sì, però mi richiedono il valore in virgola mobile, e Postgres restituisce solo la parte intera. – nwb

1

È possibile utilizzare le espressioni aritmetiche in clausola SELECT, come questo:

SELECT col1/col2 AS new_name 
FROM t 
0

interrogazione Prova in questo modo:

SELECT col1, col2/col3::float FROM table_name; 
0

In pgsql vengono digitati le colonne. Quindi se vuoi operatore su di loro; devi lanciare la colonna.

supponga di avere una colonna 'minuti' e si vuole aggiungere '+ 5' in ogni valori della colonna '' mintui

Perché si sta aggiungendo valore intero e la colonna minuti deve essere un intero solo allora l'aggiunta può essere eseguita.

modo corretto quindi:

select *, minutes+5 from my table >> errore di sintassi

select *, minutes::int + 5 from mytable >> indica l'uscita

Problemi correlati