基本上我有一个用户及其相应出生日期的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)
因此,首先它执行子查询并构建一个年龄表,而不是聚合年龄值.