2015-04-01 62 views
1

我如何分裂男性和女性並計算21歲以下的人?MySQL選擇男性和女性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

回答

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

在你其中條款,你似乎是從您的日期比較減去一個布爾值,然後比較,爲21

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

1

SELECT SUM(IF(性別= 'M',1,0)),爲男性,SUM(如果(性別= 'F',1,0)),爲女性 FROM依賴 WHERE DATE_SUB(CURDATE(),INTERVAL 21歲)< DOB

相關問題