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