日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql根据出生日期统计各年龄段男女人数

發布時間:2023/12/20 数据库 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql根据出生日期统计各年龄段男女人数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

表格名稱 user, 字段 id, sex ( M 表示男, F表示 女), birthday出生日期, 沒有 age字段

其中 ROUND(DATEDIFF(CURDATE(), birthday)/365.2422) 是獲得 年齡

CASE WHEN的格式是:

CASEWHEN ( 條件) THEN 結果WHEN ( 條件) THEN 結果WHEN ( 條件) THEN 結果 END SELECT nnd as ageRange,sex,count(*) as count from(SELECTCASEWHEN ROUND(DATEDIFF(CURDATE(), people_birthday)/365.2422) >= 0and 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) >= 23and 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_sex as sexfrom people_info_sync ) a GROUP BY nnd,sex;

結果:

存在的缺點: 因為是使用 group by的方法, 所以如果沒有記錄的話, 是不會返回數據的,
除非你用 left join 新建一張表來存 “0-12歲”,“13-17歲”,“18-22歲”,“23-30歲”,“31-59歲”,"60歲以上"這些數據, 然后使用 左連接 left join , 這樣就能保證一定會有這些數據。。。但你的組長是無論如何也不會允許你這么干的哈哈。。

寫了一個后臺處理的方法, 可以參考下

/*** sql查詢使用Group By方法,如果數據庫本身沒有那條記錄的話,就不會返回相應的總數,所以需要定死數組,再通過遍歷的方式去查找* @return*/public List<CountAgeDto> countAge(){//這里就不能用 new String[]{"男","女"} 了,要和你數據庫查出來的結果一樣才行String[] sexArr = new String[]{"F","M"};String[] ageArr = new String[]{"0-12歲","13-17歲","18-22歲","23-30歲","31-59歲","60歲以上"};//從數據庫獲得數據, 這個countAge()方法要自己寫,就執行上面的sql語句List<CountAgeDto> dataList = peopleInfoSyncDao.countAge();//首先初始化List<CountAgeDto> countAgeDtoList = new ArrayList<>();for(String sex : sexArr){for(String age: ageArr){CountAgeDto countAgeDto = new CountAgeDto();countAgeDto.setAgeRange(age);countAgeDto.setSex(sex);//初始化為0, 確保都有值countAgeDto.setCount(0L);//遍歷數據庫查出來的集合if(dataList != null && dataList.size() > 0){for(CountAgeDto d : dataList){//如果和當前的sex和age相同,就說明count有值,則退出if(d.getAgeRange().equals(age) && d.getSex().equals(sex)){countAgeDto.setCount(d.getCount());break;}}}countAgeDtoList.add(countAgeDto);}}return countAgeDtoList;}

其中CountAgeDto是:

public class CountAgeDto {/*** 總數*/private Long count;/*** 年齡段*/private String ageRange;/*** 性別*/private String sex;public Long getCount() {return count;}public void setCount(Long count) {this.count = count;}public String getAgeRange() {return ageRange;}public void setAgeRange(String ageRange) {this.ageRange = ageRange;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}@Overridepublic String toString() {return "CountAgeDto{" +"count=" + count +", ageRange='" + ageRange + '\'' +", sex='" + sex + '\'' +'}';} }

總結

以上是生活随笔為你收集整理的mysql根据出生日期统计各年龄段男女人数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。