来自MySQL的年龄与过滤器

时间:2015-04-17 23:26:53

标签: mysql

我需要有年龄的人数> 60,但MySQL返回0.请帮助我。

SELECT
   count(*),
   TIMESTAMPDIFF( YEAR, birth_date, CURDATE( ) ) AS age
FROM
   voluntario v
WHERE 
   v.id_status = 1
   HAVING age >= 60

谢谢!

2 个答案:

答案 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