1、如下的用戶訪問數據
userId visitDate visitCount
u01 2017/1/21 5
u02 2017/1/23 6
u03 2017/1/22 8
u04 2017/1/20 3
u01 2017/1/23 6
u01 2017/2/21 8
U02 2017/1/23 6
U01 2017/2/22 4
要求使用SQL統計出每個用戶的累積訪問次數,如下表所示:
用戶id 月份 小計 累積
u01 2017-01 11 11
u01 2017-02 12 23
u02 2017-01 12 12
u03 2017-01 8 8
u04 2017-01 3 3
做sql題首先要理清思路
這個題目的要查的是 用戶id 月份 小計 累積
(1.用戶id好說可以可以直接拿到
(2.月份 給的數據是年月日我們要自己轉成年月類型的
(3.小計 就是按用戶id和月份進行分類後的訪問次數的和
(4.累積 是按月份 將前面的小計求和(麻煩)
先解決yyyy/MM/dd 轉成yyyy/MM
SELECT userid id,visitCount vc,DATE_FORMAT(visitdate,'%Y-%m') yue FROM USER ;
有了月份就可以根據id和月份時間求小計
SELECT a.id 用戶id,a.yue 月份,SUM(vc) 小計
FROM (SELECT userid id,visitCount vc,DATE_FORMAT(visitdate,'%Y-%m') yue FROM USER ) a
GROUP BY a.id,a.yue
有了小計 接下來就只剩累計了,累計是根據用戶id 和月份的小計來進行算的 1月份小計是11那累計11 2月份小計12 那累計就變成了11+12 =23 那3月份的累計就等於 1月份的小計+2月份的小計+3月份的小計
SELECT a.id 用戶id,a.yue 月份,SUM(vc) 小計,
(SELECT SUM(b.小計) FROM (SELECT a.id 用戶id,a.yue 月份,SUM(vc) 小計 FROM (SELECT userid id,visitCount vc,DATE_FORMAT(visitdate,'%Y-%m') yue FROM USER ) a
GROUP BY a.id,a.yue) b WHERE b.月份<=a.yue AND b.用戶id=a.id) 累積
FROM (SELECT userid id,visitCount vc,DATE_FORMAT(visitdate,'%Y-%m') yue FROM USER ) a
GROUP BY a.id,a.yue;