【问题标题】:Group by age ranges in MySQL在 MySQL 中按年龄范围分组
【发布时间】:2016-11-24 23:51:02
【问题描述】:

我们在表中有一个出生日期字段(输入日期)和 user_id,我们希望根据出生日期字段按年龄获取用户组数

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

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

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

【问题讨论】:

  • 您的原始数据是什么样的?请发布一些示例数据
  • 查看这个问题的正确答案,而不是接受的答案。 stackoverflow.com/questions/2533890/… 。然后在计算的年龄上使用 GROUP BY。

标签: mysql sql


【解决方案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,10 等限制,它就无法使用限制。
  • 你想在Limit 0,10上申请什么?
猜你喜欢
  • 2012-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多