2012-11-14 165 views
5

我不確定我如何計算我的聯繫人的平均年齡,他們都存在於具有DOB日期字段(如YYYY-MM-DD)的mysql表中。來自DOB字段的平均年齡 - MySQL/PHP

有沒有辦法做到與一個MySQL調用(請注意我使用CakePHP的,但不應該是一個問題)

感謝

回答

7

您可以通過使用DATEDIFF()確定年齡:

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

平均在MySQL中被發現使用AVG()

AVG(Column) 

所以結合這些:

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

注意,這個返回天的平均年齡,而不是幾年。爲了獲得年你可以平均每個日期的年部分:

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

或者作爲@TimDearborn建議,由365.242199除以日平均。

+4

如果你想在365.242199年的答案,分'SELECT AVG((TO_DAYS(NOW()) - TO_DAYS(DOB)))/ 365.242199從表;' –

0

這裏是我會怎麼做:

SQL

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

這裏是你的答案

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

你並不真的需要,如果你」做一個DATEDIFF重新使用Bailey Parker的第二種方法。只需減去年份,並採取平均。

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