Durchschnittsalter ausrechnen mit daten aus einer DB
Martin Hesse
- datenbank
0 melko0 Thomas Meinike
hi leute,
habe nen problem und zwar will ich versuchen das durchschnittsalter aus einer datenbank auszulesen! das datums format wie das ganze ni der DB gespeichert ist, sieht so aus:
z.B. 1987-04-16
huuuu, nun habe ich das problem das ich net mal nen ansatz habe wie ich das amchen könnte, gibts da vielleicht irgend eine funktion in mysql? würde mich über ne antwort freuen!
mfg martin
nun am besten wäre es du lässt ihn beim speichern gleich das Alter ausrechnen und in eine eigene Spalter speichern. Ich weiß nicht in welchem Program du das brauchst, aber mein Vorschlag wäre folgender:
Beim Speichern lässt du Ihn das heutige Datum minus das eingegebene Datum ausrechnen und in eine eigene Spalte als nummerischen Wert in der Datenbank speichern, und beim Aufrufen brauchst du dann nur Spalten größe rausfinden und dann die ganze Spalte summieren und durch die Größe dividieren.
Geht so:
SELECT COUNT(Alter) FROM tabelle -> Ist die größe der Spalte
SELECT SUM (Alter) FROM tabelle -> ist die Summe der Einträge
Resultat = Größe / Summe
ja so hätte ich das auch gemacht geht nur leider net weil so eine spalte net vorhanden ist! hat kein anderer ne idee wie ich das sonst umsetzen könnte? oder obs überhaupt geht?
mfg
Martin Hesse
yo,
hat kein anderer ne idee wie ich das sonst umsetzen könnte? oder obs überhaupt geht?
die aggregat-funktion AVG() sollte für dich interessant sein, die ausserhalb der berechnung steht, mit der du das alter aus dem datumswert berechnest.
Ilja
die aggregat-funktion AVG() sollte für dich interessant sein, die ausserhalb der berechnung steht, mit der du das alter aus dem datumswert berechnest.
Das ist eine gute Funktion nur ich weiß nicht ob du eine Datumsspalte "averagen" kannst! :-) Ich meine ob du sagen kannst AVG(datum)?!?! Aber warum kannst du diese extra-Spalte nicht generieren?! Ist ja nichts drann.
ALTER TABLE Geburtstage ADD alt NUMBER; -> dann hast du in der Tabelle Geburtstag eine neue Spalte namens alt, die nummerisch ist.
Aber wenn es nicht geht, dann versuch doch mal diese ganze Tabelle auszulesen, jeden einzelnen Wert mit dem heutigen Datum differenzieren, und in Zahl umwandeln, es reicht wenn du nur das Jahr vom Datumsfeld vom heutigen Jahr abziehst, diese Werte in ein Array speicherst und vom Array den Durchschnitt berechnest, ich glaube da gibt es auch so eine Funktion average oder so... musst gucken...
schöne Grüße
yo,
Das ist eine gute Funktion nur ich weiß nicht ob du eine Datumsspalte "averagen" kannst! :-) Ich meine ob du sagen kannst AVG(datum)?!?! Aber warum kannst du diese extra-Spalte nicht generieren?! Ist ja nichts drann.
die AVG() funktion ist ausserhalb. innerhalb ist eine funktion, die das alter aus dem geburtsdatum & dem aktuelle datum berechnet. insofern stehen der AVG() schon zahlen zur verfügung.
deine idee mit der extra spalte für alter ist "unschön", den das alter ändert sich ja im laufe der zeit, das geburtsdatum nicht. insofern müsste diese extra spalte bei jedem neuen tag aktualisiert werden. deshalb ist es besser, über das geburtsdatum zu gehen.
Ilja
»» deine idee mit der extra spalte für alter ist "unschön", den das alter ändert sich ja im laufe der zeit, das geburtsdatum nicht. insofern müsste diese extra spalte bei jedem neuen tag aktualisiert werden. deshalb ist es besser, über das geburtsdatum zu gehen.
ja da hast du Recht! Aber mein zweiter Vorschlag müsste dann funktionieren, also mit der inneren Funktion die das Alter ausrechnet und in ein Array schreibt und dann den Durchschnitt des Arrays ausrechnen. Geht easy! :-)
Viel Spaß noch.
yo,
ja da hast du Recht! Aber mein zweiter Vorschlag müsste dann funktionieren, also mit der inneren Funktion die das Alter ausrechnet und in ein Array schreibt und dann den Durchschnitt des Arrays ausrechnen. Geht easy! :-)
und warum das nicht durch AVG() machen lassen ?
Ilja
Hallo,
z.B. 1987-04-16
huuuu, nun habe ich das problem das ich net mal nen ansatz habe wie ich das amchen könnte, gibts da vielleicht irgend eine funktion in mysql?
Suchst Du:
SELECT AVG(YEAR(NOW())-YEAR(geburtsdatum)) AS MITTELWERT FROM tabelle
?
MfG, Thomas