我需要有年龄的人数> 60,但MySQL
返回0.请帮助我。
SELECT
count(*),
TIMESTAMPDIFF( YEAR, birth_date, CURDATE( ) ) AS age
FROM
voluntario v
WHERE
v.id_status = 1
HAVING age >= 60
谢谢!
答案 0 :(得分:1)
您的问题不起作用的原因是因为它是一个聚合查询。因此,{<1}}在聚合后应用。要在聚合之前过滤,请使用having
子句。
这很容易做到:
where
请注意,日期算术是在SELECT count(*)
FROM voluntario v
WHERE v.id_status = 1 AND
v.birth_date < date_sub(CURDATE(), interval 60 year)
而非CURDATE()
上执行的。这允许包含birth_date
的索引用于查询(如果适用)。
在birth_date
中使用age
没有意义,因为(可能)有许多不同的年龄,查询只返回一个不确定的值。
答案 1 :(得分:0)
为什么不这样做:
SELECT
count(*),
birth_date
FROM
voluntario v
WHERE
v.id_status = 1 AND TIMESTAMPDIFF( YEAR, birth_date, CURDATE( ) ) >= 60