MySQL筆試題 累計報表

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;

在這裏插入圖片描述

發佈了22 篇原創文章 · 獲贊 124 · 訪問量 2153
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章