2012-11-14 168 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;