終於暫時閑下來了,一個項目加班加點一年多,前面太忙就顧不上博客了,慢慢的就懈怠了,最近算是暫時閑下來了,項目已經驗收進入后期維護階段,每天空余的時間也多了,想重新拾起博客,不求寫什么高深的東西,以后就盡量就每次自己遇到的問題,並把解決方法在這里記錄一下,可能顯得很簡單不適合他人看,但是就當自己日記一樣記錄還是不錯的,因為在這個項目里我有好幾次遇到類似的以前解決過的問題,卻還是要看了自己當初的百度提問才得以解答,還是要記錄下比較好。
這次要記錄的是昨天客戶找我要一個關於注冊用戶年齡段,性別分布情況,當時把我卡住了,等到解決了才發現其實這個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函數中可以這么干。