2012-11-14 2 views
5

Ich war mir nicht sicher, wie ich das Durchschnittsalter meiner Kontakte berechnen könnte, die alle in einer Mysql-Tabelle mit einem DOB-Datumsfeld wie YYYY-MM-DD existieren.Durchschnittsalter von DOB Feld - MySQL/PHP

Gibt es eine Möglichkeit mit einem MySQL-Aufruf zu tun (bitte beachten Sie, ich bin mit CakePHP, aber das sollte kein Problem sein)

Dank

Antwort

7

Sie können DATEDIFF() Alter bestimmen unter Verwendung von:

DATEDIFF(TO_DAYS(NOW()), TO_DAYS(DOB)) 

Der Durchschnitt in MySQL mit AVG() gefunden:

AVG(Column) 

So kombinieren jene:

SELECT AVG(DATEDIFF(TO_DAYS(NOW()), TO_DAYS(DOB))) as `Average` FROM Contacts; 

Beachten Sie, dass dies das Durchschnittsalter in Tagen zurückkehrt, nicht Jahre. Erhalten Jahren können Sie die Jahre Teil jedes Datum Durchschnitt:

SELECT AVG(DATEDIFF(YEAR(NOW()), YEAR(DOB))) as `Average` FROM Contacts; 

Oder wie @TimDearborn vorgeschlagen, teilen Sie den Tag Durchschnitt von 365,242199.

+4

Wenn Sie die Antwort in Jahren wollen, teilen durch 365,242199 SELECT AVG ((TO_DAYS (NOW()) - TO_DAYS (DOB)))/365,242199 aus der Tabelle; ' –

0

Hier ist, wie ich es tun würde:

SQL

SELECT 
AVG(YEAR(now()) - YEAR(<DOB_field>)) as avg_age 
FROM <table_name> 
WHERE <DOB_field> IS NOT NULL 
1

Hier ist Ihre Antwort

SELECT AVG(TIMESTAMPDIFF(YEAR, DOB, CURDATE())) AS `Average` FROM Contacts WHERE DOB IS NOT NULL; 
1

Es ist nicht wirklich eine datediff tun müssen, wenn Sie‘ Verwenden Sie Bailey Parkers zweite Methode. Subtrahieren Sie einfach die Jahre und nehmen Sie den Durchschnitt.

SELECT AVG(YEAR(NOW())-YEAR(dob)) as `Average` FROM users; 
Verwandte Themen