2016-07-21 4 views
1

У нас есть дата рождения поля (дата типа) и user_id в таблице, и мы хотим, чтобы получить количество группы пользователей по возрасту на основе даты рождения полягруппы по возрастному в MySQL

Для например, после бега мы получаем следующие записи

Age Total_Users 
1-20 50 
20-30 100 
30-50 500 
50-100 600 

как мы можем написать этот тип запроса? Пожалуйста, предложите. В настоящее время я управления через PHP-код, но он занимает слишком много времени из-за большого количества записей Спасибо

+0

Как ваши исходные данные выглядят? пожалуйста, отправьте некоторые данные образца – 1000111

+0

Посмотрите на правильный, а не на принятый ответ на этот вопрос. http://stackoverflow.com/questions/2533890/how-to-get-an-age-from-a-d-o-b-field-in-mysql. Затем используйте GROUP BY для вычисленных возрастов. –

ответ

1

Может быть, запрос, как показано ниже, будет выполнять эту работу.

SELECT 
CASE WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(birth_date, '%Y') - (DATE_FORMAT(NOW(), '00-%m-%d') < DATE_FORMAT(birth_date, '00-%m-%d'))) <= 20 THEN '1-20' 
    WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(birth_date, '%Y') - (DATE_FORMAT(NOW(), '00-%m-%d') < DATE_FORMAT(birth_date, '00-%m-%d'))) <= 30 THEN '20-30' 
    WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(birth_date, '%Y') - (DATE_FORMAT(NOW(), '00-%m-%d') < DATE_FORMAT(birth_date, '00-%m-%d'))) <= 50 THEN '30-50' 
    WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(birth_date, '%Y') - (DATE_FORMAT(NOW(), '00-%m-%d') < DATE_FORMAT(birth_date, '00-%m-%d'))) <= 50 THEN '50-100' END AS age, 
COUNT(*) total 
FROM dob_table 
GROUP BY age; 

WORKING DEMO

Вход:

| id |     birth_date | 
|----|----------------------------| 
| 1 | February, 01 2014 00:00:00 | 
| 2 | February, 01 2014 00:00:00 | 
| 3 | February, 01 2014 00:00:00 | 
| 4 | February, 01 2010 00:00:00 | 
| 5 | February, 27 1989 00:00:00 | 
| 6 | February, 27 1989 00:00:00 | 
| 7 | February, 27 1989 00:00:00 | 
| 8 | February, 27 1989 00:00:00 | 
| 9 | February, 27 1989 00:00:00 | 

Выход:

age  total 
1-20  4 
20-30  5 
+0

Большое спасибо. Это сработало. –

+0

Hii, ваш запрос работал для меня, но есть проблема только в том, что он не работает с лимитом, если мы пропустим лимит, например 0,10 или т. Д. –

+0

На что «Предел 0,10» вы хотите применить? – 1000111

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