如何按mysql中的年龄段分组用户数

sko*_*oko 7 mysql

基本上我有一个用户及其相应出生日期的mysql数据库.我还发现了以下一些代码,可以帮助我找到用户从出生之日起的实际年龄.寻找出生日期我需要做的是找到不同的"年龄段"并计算该年龄段的用户数量.我还发现这个例子显示了如何对这些数据进行分组.我想首先计算年龄并以类似于以下链接所示的方式使用它.我编写了以下代码,运行时遇到错误:

SELECT DATE_FORMAT(NOW(), '%Y') -
DATE_FORMAT(data_of_birth, '%Y') -
(DATE_FORMAT(NOW(), '00-%m-%d') <
DATE_FORMAT(data_of_birth,
'00-%m-%d')) AS age, COUNT(*),  
CASE  
  WHEN age >= 10 AND age <= 20 THEN '10-20'  
  WHEN age >=21 AND age <=30 THEN '21-30'  
  WHEN age >=31 AND age <=40 THEN '31-40'  
  WHEN age >=41 AND age <= 50 THEN '31-40'  
  WHEN age >=51 AND age <=60 THEN '51-60'  
  WHEN age >=61 THEN '61+'   
END AS ageband  
.. ..   
GROUP BY ageband  
Run Code Online (Sandbox Code Playgroud)

我收到一个错误,指出现场年龄未知.我写错了吗?我可以轻松地编写整个代码块来计算在case语句中写入年龄的年龄,但这似乎效率非常低.我不是很擅长mysql(还),我知道必须有更好的方法来做到这一点.我想我的主要问题是,如果有某种方式来创建一个查询中的功能和功能分配的输出值?

Ste*_*man 15

在这种情况下,您可以使用子查询:

SELECT
  COUNT(*),
  CASE
    WHEN age >=10 AND age <=20 THEN '10-20'
    WHEN age >=21 AND age <=30 THEN '21-30'
    WHEN age >=31 AND age <=40 THEN '31-40'
    WHEN age >=41 AND age <=50 THEN '41-50'
    WHEN age >=51 AND age <=60 THEN '51-60'
    WHEN age >=61 THEN '61+'
  END AS ageband
FROM
  (
     DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(date_of_birth, '%Y') - (DATE_FORMAT(NOW(), '00-%m-%d') < DATE_FORMAT(date_of_birth, '00-%m-%d')) AS age,
.. ..
  ) as tbl
GROUP BY ageband;
Run Code Online (Sandbox Code Playgroud)

因此,首先它执行子查询并构建一个年龄表,而不是聚合年龄值.