表stu数据如下

1. 根据出生日期查询年龄
SELECT TIMESTAMPDIFF(YEAR,DATE(birthdate),CURDATE()) AS age FROM stu;
返回结果:
函数DATE():提取日期或日期/时间表达式的日期部分;
函数CURDATE():返回当前的日期;
函数TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2):计算两个日期的时间差,unit是计算时间差的单位,可以是SECOND秒、MINUTE分钟、HOUR小时、DAY天、WEEK星期、MONTH月、QUARTER季度、YEAR年。
2.对年龄进行分组统计
1)case 结构
SELECT
年龄段,count(*) 人数
FROM
(
SELECT
CASE
WHEN TIMESTAMPDIFF(YEAR,DATE(birthdate),CURDATE())<20 THEN '20岁以下'
WHEN TIMESTAMPDIFF(YEAR,DATE(birthdate),CURDATE()) >= 20 AND TIMESTAMPDIFF(YEAR,DATE(birthdate),CURDATE()) <= 22 THEN '20-22岁'
WHEN TIMESTAMPDIFF(YEAR,DATE(birthdate),CURDATE()) >= 23 AND TIMESTAMPDIFF(YEAR,DATE(birthdate),CURDATE()) <= 25 THEN '23-25岁'
WHEN TIMESTAMPDIFF(YEAR,DATE(birthdate),CURDATE())>25 THEN '25岁以上'
else '未知'
END AS 年龄段
FROM stu
) AS a
GROUP BY 年龄段;
2)if结构
SELECT
年龄段,count(*) 人数
FROM
(
SELECT
IF(TIMESTAMPDIFF(YEAR,DATE(birthdate),CURDATE())<20,'20岁以下',
IF(TIMESTAMPDIFF(YEAR,DATE(birthdate),CURDATE())>= 20 AND TIMESTAMPDIFF(YEAR,DATE(birthdate),CURDATE()) <= 22,'20-22岁',
IF(TIMESTAMPDIFF(YEAR,DATE(birthdate),CURDATE())>= 23 AND TIMESTAMPDIFF(YEAR,DATE(birthdate),CURDATE()) <= 25,'23-25岁',
IF(TIMESTAMPDIFF(YEAR,DATE(birthdate),CURDATE())>25,'25岁以上','未知'))))
AS 年龄段
FROM stu
)AS a
GROUP BY 年龄段;
返回结果:
该文展示了如何使用SQL查询从stu表中根据出生日期计算年龄,并按年龄区间进行统计。通过TIMESTAMPDIFF函数计算年龄,然后利用CASE或IF结构将年龄分组为不同的年龄段,最后使用GROUPBY进行统计计数。



675

被折叠的 条评论
为什么被折叠?



