PostgreSQL

Thomas Baedorf tom at buchforst.ping.de
So Jul 6 15:20:47 CEST 2008


On Sun, Jul 06, 2008 at 12:49:19PM +0300, Guido Flohr wrote:
> 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;
Der Kehrwert geht - Ergebnis bleibt ja auch in interval
> 
> >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;
 SELECT EXTRACT(epoch FROM zeit) / 3600 FROM fahrrad; -- HEY Super

> 
> 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;
und da die Tabelle insgesamt die Attribute 	datum
						km
						zeit
						kommentar (Fahrtziel)
hat , kann man sogar noch
--SQL
SELECT to_char(datum,'yyyy') as jahr,to_char(datum,'mm') as monat,sum(km)*3600/extract(epoch from sum(zeit)) from fahrrad group by jahr,monat order by jahr,monat;
--SQL
eingeben (sinnvollerweise den Puffer in Datei speichern)
und hat dann den Speed Mittelwert pro Monat.
Ergebnis: Im Sommer bin ich schneller als im Winter.
wer hätte das gedacht.
Übrigens hatte ich die Sache mit EXTRACT und "epoch" auch in der
Doku gefunden, dachte aber nicht das es zu Ziel führt.
> Oder wenn du es pro Fahrt willst:
> 
> SELECT 3600 * km / EXTRACT(epoch FROM zeit) as avg_speed FROM fahrrad;
Ja, genau klappt prima
> 
> Gruß,
> Guido
Vielen Dank nochmal
> -- 
> ?????????????? ??????                         | Imperia OOD
> ????. ???????????-??????????-I??? ??? 86, ?????????? 1000 | ul. 
> "Knyaz-Boris-I" ??? 86, Sofia
> http://www.imperia.bg/
> 



-- 
______
Thomas
-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname   : signature.asc
Dateityp    : application/pgp-signature
Dateigröße  : 189 bytes
Beschreibung: Digital signature
URL         : <http://lists.uni-koeln.de/pipermail/linux-users/attachments/20080706/05b9400f/attachment.asc>


Mehr Informationen über die Mailingliste Linux-Users