2009-11-22 9 views
6

Mit PostgreSQL, eine Tabelle wie die folgende Annahme:Postgres mathematischer Ausdruck für jede Zeile in der Tabelle calculcated

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

Wie kann ich berechnen, einen mathematischen Ausdruck für jede Zeile in der Tabelle?

Zum Beispiel zu teilen Spalte 2 von Spalte 3, so dass die Ausgabe wäre:

12184 | 0.04819277108 
12183 | 0.01754385965 
12176 | 0.06315789474 

Mein Instinkt zu versuchen, war:

SELECT col1, col2/col3 FROM table_name; 

Aber das Rück die Decke (dh. abgerundet) ganzzahliger Teil, ich brauche den Gleitkommawert.

Antwort

9

Typische Guss Trick benötigt, da col2 und col3 ganze Zahlen sind (so Ergebnis ist standardmäßig eine ganze Zahl)

select col1, col2/col3*1.0 from table 

oder

select col1, col2/col3::float from table 

oder (SQL Standard-Weg)

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

Vielen Dank allen. Ich habe tatsächlich Folgendes verwendet: SELECT col1, Cast (col2 als Float)/Cast (Col3 als Float) FROM Tabelle; Gibt es einen Grund, einen Weg gegenüber einem anderen vorzuziehen? – nwb

+0

Weitere Informationen finden Sie unter http://www.postgresql.org/docs/8.4/interactive/typeconv.html. In der Tat bevorzuge ich Ihren Weg, wie es Standard ist, ist das :: Type-Formular eine PostgreSQL-Erweiterung. –

+0

Und wie du an meinen Beispielen sehen kannst, kannst du nur den Nenner werfen. –

0
select col1, col2/col3 from table; 

Sollte funktionieren. Sind col2 und col3 nicht numerisch?

+0

Ja, aber ich den Gleitkommawert erfordern, und Postgres nur zurückgibt den ganzzahligen Teil. – nwb

1

Sie können in SELECT-Klausel arithmetische Ausdrücke verwenden, wie folgt aus:

SELECT col1/col2 AS new_name 
FROM t 
0

Try Abfrage wie folgt:

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

In PgSql werden die Spalten eingegeben haben. Also wenn du auf ihnen operieren willst; Sie müssen die Spalte umwandeln.

dass Sie eine Spalte ‚Minuten‘ haben, und Sie wollen ‚5‘ hinzuzufügen in jedem Wert der Spalte ‚mintues‘

Weil Sie hinzufügen und Integer-Wert die Minuten Spalte darf nur dann die Zugabe eine ganze Zahl sein kann durchgeführt werden.

daher falscher Weg:

select *, minutes+5 from my table >> Syntaxfehler

select *, minutes::int + 5 from mytable >> gibt dem Ausgang

Verwandte Themen