PostgreSQL

Guido Flohr guido at imperia.bg
So Jul 6 11:49:19 CEST 2008


Thomas Baedorf schrieb:
> hallo Datenbankfans,
> ich benutze eine Tabelle in der ich eintrage
> wieviel km ich mit dem Fahrrad fahre und die
> Zeit, die ich benötige.
> DBMS ist übrigens PostgreSQL 8.1.11.
> Die Spalte km hat den Datentyp numeric(4,1) und
> die zeit::interval.
> Ein auf den ersten Blick bescheidener Wunsch wäre
> die Durchschnittsgeschwindigkeit zu ermitteln.
> 'select km/zeit from fahrrad' führt jedoch zu
> Fehlermeldung, wobei ein sinnloses 'select km*zeit from
> fahrrad' funktioniert; allerdings ist die Ausgabe im Datentyp interval.

Intern speichert PostgreSQL Zeitintervalle heruntergebrochen in Monate, 
Tage und Sekunden, weil sowohl die Tage pro Monat, als auch die Sekunden 
pro Tag schwanken.

Was geht - und das ist nicht sinnlos - ist übrigens der Kehrwert, also 
Zeit pro km:

SELECT zeit / km FROM fahrrad;

> Damit das Ganze überhaupt funktioniert,muss die zeit vom Datentyp interval
> in eine Dezimalzahl umgewandelt werden. 
> Und genau das geht eben 
> nicht.
> 'select zeit::real from fahrrad' -> ERROR: cannot cast type 
> interval to real !
> Gibt es eine Funktion die ein interval also z.B. 2 Std 30 min
> in den Wert 2.5 verwandelt?

SELECT EXTRACT(epoch FROM zeit) / 3600;

Ohne Test - hab keinen Server hier - müsstest du so zum Ergebnis kommen:

SELECT 3600 * SUM(km) / SUM(EXTRACT(epoch FROM zeit)) as avg_speed FROM 
fahrrad;

Oder wenn du es pro Fahrt willst:

SELECT 3600 * km / EXTRACT(epoch FROM zeit) as avg_speed FROM fahrrad;

Gruß,
Guido
-- 
Империя ООД                         | Imperia OOD
ул. „Княз-Борис-I“ № 86, София 1000 | ul. "Knyaz-Boris-I" № 86, Sofia
http://www.imperia.bg/

-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname   : signature.asc
Dateityp    : application/pgp-signature
Dateigröße  : 260 bytes
Beschreibung: OpenPGP digital signature
URL         : <http://lists.uni-koeln.de/pipermail/linux-users/attachments/20080706/91daa9f2/attachment.asc>


Mehr Informationen über die Mailingliste Linux-Users