mysql根据出生日期统计各年龄段男女人数
生活随笔
收集整理的這篇文章主要介紹了
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根据出生日期统计各年龄段男女人数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Redis数据库(四)哨兵和集群
- 下一篇: linux cmake编译源码,linu