mysql按周統(tǒng)計怎么做的簡單介紹

MYSQL經典SQL之星期問題

取值為0~6,對應星期一到星期日,每周以星期一為第一天

成都創(chuàng)新互聯(lián)是一家集網站建設,煙臺企業(yè)網站建設,煙臺品牌網站建設,網站定制,煙臺網站建設報價,網絡營銷,網絡優(yōu)化,煙臺網站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網站。

取值為1~7,對應星期日到星期六,每周以星期日為第一天

取值為Sunday~Saturday,對應星期日到星期六,第一天是星期日;

該函數(shù)與參數(shù)lc_time_names有關,如果設置此參數(shù)值為"zh_CN",則得到對應的中文名稱“星期日”~“星期六”

示例:

2017-01-02是星期一,使用這三個函數(shù)分別得到的是0,2,Monday

修改lc_time_names參數(shù)后,得到中文名稱:

該函數(shù)用于獲取日期是年度中的第幾周。該函數(shù)比較復雜,使用不同的mode,得到不同的結果。見下表:

例如,mode值為1,則每周的第一天為周一,week()函數(shù)的結果為0~53,如果第一個周天數(shù)少于4,則記為第0周,如果第一個周天數(shù)大于等于4,則記為第1周。

再如,mode值為2,則每周第一天為周日,week()函數(shù)的結果為1~53,如果第一個周里包含了周日,則記為第1周,如果第一個周里沒有周日,則記為上一年度的最后一周。

實際上,這個參數(shù)主要是為了解決跨年的周該如何歸屬的問題,是算作本年度的第一周,還是上一年度的最后一周,又或者是算作第0周。這需要根據使用場景和習慣來選擇。

但不管怎么歸屬,week函數(shù)本身的取值范圍有限,所以再跨年的時間區(qū)間一般不用此函數(shù)(后邊舉例說明)。

參考:

假設我們有一張銷售表,內容如下:

現(xiàn)在,我們要統(tǒng)計每周的銷售額。

首先想到的是用week函數(shù),計算日期對應的周數(shù),然后按照這個周數(shù)來進行分組求和:

如果能保證這個日期區(qū)間是在一個年度內的,那么用week函數(shù)完全沒有問題。

很不幸的是,通常日期區(qū)間是跨年的,例如我們這個示例中的數(shù)據,恰好有跨年的周,2010-12-31日是第52周,2011-01-01變成了2011年度的第0周,而實際上這兩天是在同一周。

要解決這個問題,我們不能指望week函數(shù),因為該函數(shù)的返回結果總是在0~53循環(huán),我們需要找一個固定時間為第一周,之后的周數(shù)累加而非循環(huán)。

例如,我們選擇2010-01-03為第一周的第一天,之后的任意一天201x-xx-xx距離2010-01-03的天數(shù)/7記為周數(shù),得到結果如下:

以上解決方案中,我們選擇2010-01-03為起始日期,因為它離我們要統(tǒng)計的時間足夠遠,同時它是星期日(我們認為周日是一周的第一天)。

如果我們需要把星期一當作第一天,只需要改為2010-01-04即可。

mysql中通過關鍵字進行分組,來統(tǒng)計本月每周的數(shù)據

select? 關鍵字,count(第一周),count(第二周),count(第三周),count(第四周) from TableName??group?by??關鍵字

如何在mysql中group by week

易客CRM之前的版本中有一個報表是按月統(tǒng)計銷售情況,最近有個客戶想按周統(tǒng)計銷售情況。按月統(tǒng)計的Sql語句比較好寫,sql語句如下:

SELECT DATE_FORMAT(ec_salesorder.duedate,’%Y-%m’) as m, sum(ec_salesorder.total) as total, count(*) as so_count FROM ec_salesorder GROUP BY m ORDER BY m,也就是把duedate日期以月的形式顯示,然后groupby,那么按周如何統(tǒng)計呢?

搜了一下mysql的manual,在這里找到一個解決方法,通過mysql的week函數(shù)來做,sql語句如下:SELECT WEEK(ec_salesorder.duedate) as m, sum(ec_salesorder.total) as total, count(*) as so_count FROM ec_salesorder GROUP BY m ORDER BY m,這個方法有個缺陷,不能顯示年份,僅僅靠一個周數(shù)不方便查看統(tǒng)計信息。

繼續(xù)研究mysql manual,在DATE_FORMAT函數(shù)介紹發(fā)現(xiàn)2個格式符和周有點關系:

%X Year for the week where Sunday is the first day of the week, numeric, four digits; used with %V

%x Year for the week, where Monday is the first day of the week, numeric, four digits; used with %v

把上面的Sql語句中改成:

SELECT DATE_FORMAT(ec_salesorder.duedate,’%x %v’) as m, sum(ec_salesorder.total) as total, count(*) as so_count FROM ec_salesorder GROUP BY m ORDER BY m

顯示的結果如下:

m total so_count

2009 11 10000.00 3

2009 12 44000.00 5

如果周日為一周的第一天,那么sql語句應該為:

SELECT DATE_FORMAT(ec_salesorder.duedate,’%X %V’) as m, sum(ec_salesorder.total) as total, count(*) as so_count FROM ec_salesorder GROUP BY m ORDER BY m

結果應該沒錯,不出意外,易客CRM下個版本將增加按周統(tǒng)計銷售情況的報表。

mysql mysql怎么按照自己定義的周統(tǒng)計每周的數(shù)據

假設你的表為 ta 日期字段是 dt

那么,以 2015-01-01為起始日,每5天累總計數(shù)為:

select datediff(dt, '2015-01-01') div 5 as d5 , count(*)

from ta

group by (datediff(dt, '2015-01-01') div 5)

網站名稱:mysql按周統(tǒng)計怎么做的簡單介紹
本文來源:http://muchs.cn/article32/doeocpc.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)面包屑導航、App開發(fā)關鍵詞優(yōu)化、營銷型網站建設、網站營銷

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

網站托管運營