mysql根據出生日期統計各年齡段男女人數

2021-08-28 09:35:01 字數 2534 閱讀 4374

**名稱 user, 字段 id, *** ( m 表示男, f表示 女), birthday出生日期, 沒有 age欄位

其中round(datediff(curdate(), birthday)/365.2422)是獲得 年齡

case when的格式是:

case

when ( 條件) then 結果

when ( 條件) then 結果

when ( 條件) then 結果

end

select nnd as agerange,***,count(*) as count from(

select

case

when round(datediff(curdate(), people_birthday)/365.2422) >= 0

and round(datediff(curdate(), people_birthday)/365.2422) <= 12 then '0-12歲'

when round(datediff(curdate(), people_birthday)/365.2422) >= 13

and round(datediff(curdate(), people_birthday)/365.2422) <= 17 then '13-17歲'

when round(datediff(curdate(), people_birthday)/365.2422) >= 18

and round(datediff(curdate(), people_birthday)/365.2422) <= 22 then '18-22歲'

when round(datediff(curdate(), people_birthday)/365.2422) >= 23

and round(datediff(curdate(), people_birthday)/365.2422) <= 30 then '23-30歲'

when round(datediff(curdate(), people_birthday)/365.2422) >= 31

and round(datediff(curdate(), people_birthday)/365.2422) <= 59 then '31-59歲'

when round(datediff(curdate(), people_birthday)/365.2422) >= 60 then '60歲以上'

end as nnd

,people_*** as ***

from people_info_sync

) a group by nnd,***;

結果:

存在的缺點: 因為是使用 group by的方法, 所以如果沒有記錄的話, 是不會返回資料的,

除非你用 left join 新建一張表來存 「0-12歲」,「13-17歲」,「18-22歲」,「23-30歲」,「31-59歲」,"60歲以上"這些資料, 然後使用 左連線 left join , 這樣就能保證一定會有這些資料。。。但你的組長是無論如何也不會允許你這麼幹的哈哈。。

寫了乙個後台處理的方法, 可以參考下

/**

* sql查詢使用group by方法,如果資料庫本身沒有那條記錄的話,就不會返回相應的總數,所以需要定死陣列,再通過遍歷的方式去查詢

* @return

*/public listcountage() 了,要和你資料庫查出來的結果一樣才行

string ***arr = new string;

string agearr = new string;

//從資料庫獲得資料, 這個countage()方法要自己寫,就執行上面的sql語句

listdatalist = peopleinfosyncdao.countage();

//首先初始化

listcountagedtolist = new arraylist<>();

for(string *** : ***arr)}}

countagedtolist.add(countagedto);}}

return countagedtolist;

}

其中countagedto是:

public class countagedto 

public void setcount(long count)

public string getagerange()

public void setagerange(string agerange)

public string get***()

public void set***(string ***)

@override

public string tostring() ';}}

mysql根據出生日期計算年齡

select date format from days to days now to days birthday y 0 as age方法一,作者也說出了缺陷,就是當日期為未來日期時結果為0,而不是負數 這裡使用了5個函式和兩個運算子。select date format now y date f...

根據出生日期計算距離生日時間

具體使用根據情況大家自己調整,此處僅供參考。根據出生日期計算生日天數 jxcore.birthwarm function value,fieldctl var dd eval new birth.substr 1,birth.length 2 var ar date dd.getmonth 1,dd...

SQL Server 根據出生日期計算年齡

getdate 函式用於返回當前的日期和時間 datediff 函式返回兩個日期之間的時間。語法 datediff datepart,startdate,enddate startdate 和 enddate 引數是合法的日期表示式。datepart 引數可以是下列的值 datepart縮寫年 yy...