我如何分割男性和女性并计算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
答案 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) < 21
或where 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