Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL中按年龄范围分组_Mysql_Sql - Fatal编程技术网

MySQL中按年龄范围分组

MySQL中按年龄范围分组,mysql,sql,Mysql,Sql,我们在表中有一个出生日期字段(类型date)和用户id,我们希望根据出生日期字段按年龄获得用户组的计数 例如,运行后,我们会得到以下记录 Age Total_Users 1-20 50 20-30 100 30-50 500 50-100 600 我们如何编写这种类型的查询?请建议。目前我是 通过php代码进行管理,但由于记录太多,需要花费太多时间 谢谢可能是下面这样的查询就可以了 SELECT CASE WHEN (DATE_FORMAT(NOW(), '%Y') -

我们在表中有一个出生日期字段(类型date)和用户id,我们希望根据出生日期字段按年龄获得用户组的计数

例如,运行后,我们会得到以下记录

Age  Total_Users 
1-20    50
20-30   100
30-50   500
50-100  600
我们如何编写这种类型的查询?请建议。目前我是 通过php代码进行管理,但由于记录太多,需要花费太多时间
谢谢

可能是下面这样的查询就可以了

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;
输出:

| 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

您的原始数据看起来如何?请发布一些示例数据查看此问题的正确答案,而不是已接受的答案。然后在计算的年龄上使用GROUP BY。您好,您的查询对我有效,但唯一的问题是,如果我们通过0,10之类的限制,它不适用于限制。您希望应用的
限制0,10