MySQL选择21岁以下的男性和女性

时间:2015-04-01 23:31:36

标签: mysql split

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

enter image description here

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

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

3 个答案:

答案 0 :(得分:2)

计算不同值的最佳方法是使用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

答案 1 :(得分:1)

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

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

怎么样?

答案 2 :(得分:1)

SELECT SUM(if(gender ='M',1,0))为男性,SUM(if(gender ='F',1,0))为女性 来自依赖 WHATE DATE_SUB(CURDATE(),INTERVAL 21年)&lt; dob