工作中遇到的問題——mysql關於年齡,性別的統計


終於暫時閑下來了,一個項目加班加點一年多,前面太忙就顧不上博客了,慢慢的就懈怠了,最近算是暫時閑下來了,項目已經驗收進入后期維護階段,每天空余的時間也多了,想重新拾起博客,不求寫什么高深的東西,以后就盡量就每次自己遇到的問題,並把解決方法在這里記錄一下,可能顯得很簡單不適合他人看,但是就當自己日記一樣記錄還是不錯的,因為在這個項目里我有好幾次遇到類似的以前解決過的問題,卻還是要看了自己當初的百度提問才得以解答,還是要記錄下比較好。

這次要記錄的是昨天客戶找我要一個關於注冊用戶年齡段,性別分布情況,當時把我卡住了,等到解決了才發現其實這個sql我大二考試的時候就寫過,只是把以前是班級現在是年齡,以前是sqlserver現在是mysql而已,話不多說,解決過程如下:

首先,是我們數據庫的當前內容:

然后我們要給他最終統計成三個字段:年齡  男  女

需要的最終統計結果圖如下:

步驟1:我們要把先他統計成  年齡,性別  的結果

sql:

SELECT DATE_FORMAT(FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(birthday)), '%Y')+0 AS age,t1.sex
FROM test t1
ORDER BY age

 其結果如下:

步驟2:將上圖的結果作為臨時表,再統計成最終結果圖

sql:

SELECT CONCAT(age,'歲') AS '年齡',SUM(CASE WHEN sex='男' THEN 1 ELSE 0 END) AS '男',SUM(CASE WHEN sex='女' THEN 1 ELSE 0 END) AS '女'
FROM
(
SELECT DATE_FORMAT(FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(birthday)), '%Y')+0 AS age,t1.sex
FROM test t1
ORDER BY age
) AS tt
GROUP BY age

寫在最后:

當然實際工作中的數據並不是這樣,但是大體上差不多,只是多了一些條件而已,比如xx時間之前注冊的。這次統計sql中,關於怎么把生日轉化為年齡的sql我確實不會,但是這個很容易百度到,我當時查的是Y橡樹Y的文章,其中一篇講述了5種將生日轉化成年齡的sql,我選擇了第一種,據說當時間大於當前時間會出錯,但是我這里不存在這種場景就取用了。而在將查詢結果轉換成年齡性別了以后,就看上去很眼熟了,就和我們大學時候遇到的題目一樣,班級,姓名,年齡,性別,然后進行分組查詢統計。

這次是告誡我自己,有些東西用的少了還不復習確實容易犯一些低級錯誤,我當時絞盡腦汁想在分組那里做文章,而忘記了sum函數中可以這么干。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM