2012-11-14 2 views
5

Я не был уверен, как рассчитать средний возраст моих контактов, которые все существуют в таблице mysql с полем даты DOB, например, YYYY-MM-DD.Средний возраст от DOB Field - 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 'ВЫБРАТЬ 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» используя второй метод Бейли Паркера. Просто вычтите годы и возьмите avg.

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

 Смежные вопросы

  • Нет связанных вопросов^_^