MySQL查询问题:如何计算并筛选18-25岁的人员数据
解决SQL筛选18-25岁人员的问题
错误原因
你写的SQL报错是因为WHERE子句里把函数名TIMESTAMPDIFF当成列名用了,数据库找不到这个列,所以抛出#1054错误。
正确的单条查询写法
不需要拆分多条查询,单条语句就能实现需求,下面是几种可行写法:
写法一:WHERE子句直接计算年龄
直接在WHERE里完整调用函数计算年龄,再做范围判断:
SELECT name, TIMESTAMPDIFF(YEAR, birthday, CURDATE()) AS age FROM personnel WHERE TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 18 AND 25;
写法二:用HAVING过滤别名
MySQL的WHERE不能直接用SELECT里定义的别名,改用HAVING可以直接用别名筛选(适用于MySQL 5.7+,或关闭ONLY_FULL_GROUP_BY模式):
SELECT name, TIMESTAMPDIFF(YEAR, birthday, CURDATE()) AS age FROM personnel HAVING age BETWEEN 18 AND 25;
写法三:子查询包装
通过子查询先算出年龄,再在外层筛选:
SELECT name, age FROM ( SELECT name, TIMESTAMPDIFF(YEAR, birthday, CURDATE()) AS age FROM personnel ) AS temp_table WHERE age BETWEEN 18 AND 25;
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

