MySQL select 21 岁以下的男性和女性

MySQL select males and females under 21

我如何区分男性和女性并计算 21 岁以下的人数?

到目前为止我有这个(但值不正确):

SELECT 
    COUNT( if(gender='M', 1, 0) ) AS males, 
    COUNT( if(gender='F', 1, 0) ) AS females 
FROM 
    dependent
WHERE 
    YEAR(CURRENT_TIMESTAMP) - YEAR(dob) - (RIGHT(CURRENT_TIMESTAMP, 5) < RIGHT(dob, 5)) < 21

输出应该是这样的:

男性 |女性

1 | 2

在您的 where 子句中,您似乎从日期比较中减去一个布尔值,然后将其与 21 进行比较。

where YEAR(CURRENT_TIMESTAMP) - YEAR(dob) < 21where RIGHT(CURRENT_TIMESTAMP, 5) - RIGHT(dob, 5) < 21

怎么样

SELECT SUM(if(gender='M',1,0)) 作为男性,SUM(if(gender='F',1,0)) 作为女性 FROM依赖 WHERE DATE_SUB(CURDATE(), INTERVAL 21 YEARS) < dob

计算不同值的最佳方法是使用 GROUP BY。您将获得多行,而不是多列,但通常这是标准方法。

另外对于年龄的查询,最好的方法是根据当前日期计算出目标日期并进行搜索,确保索引在dob列上可用。

SELECT
  COUNT(*), gender
FROM
  dependent
WHERE
  dob >= DATE_SUB(CURDATE(), INTERVAL 21 YEAR)
GROUP BY gender;

https://dev.mysql.com/doc/refman/5.6/en/group-by-functions.html https://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html