日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

MySQL實現查詢分位值的示例代碼

瀏覽:291日期:2023-05-05 10:12:09
目錄
  • 背景
  • 業務背景
  • 思考
  • 效果
  • 參考

背景

分位值的概念

分位值:分位值(Quartile)是一種用于描述數據分布的統計概念,在統計學和數據分析中經常被用到。一般情況下,分位值分成四個等份,分別為第一分位數(Q1)、第二分位數(Q2)(也就是中位數)、第三分位數(Q3)以及極差(IQR)。其中,1/4的數據小于第一分位數,1/4的數據大于第三分位數,中間50%的數據處于第一分位數和第三分位數之間。 在統計學中,第一分位數是指將一組數據按照大小順序排列后,處于整個數列中最靠前的25%位置的數;第二分位數是指一組數據按大小順序排列后,處于中間位置的那個數;而第三分位數是指將一組數據按照大小順序排列后,處于整個數列中最靠后的25%位置的數。中位數是第二分位數。 在數據分析中,分位值可以幫助我們了解數據分布情況以及通過分位值來判斷數據是否偏向一側或者分散程度等問題。當數據分配不均勻的時候,分位值可以更準確的表現數據的差異。

業務背景

商家活動發券面額有一個分布區間[1, 20],每發一張券就都會標記對應券的面額。如何比較準確的控制券的成本,就需要實時對這些券的發放情況做一個比較準確的了解。對券的發放量、發券金額均值、以及發放金額分位值(了解不同區間發放金額均值)進行實時的監控,就可以比較清楚的了解券的發放情況。

目前,業務梳理出如下指標需要數據的同學提供,所有指標均以分鐘為統計粒度:

發放量:發券總量

發券金額均值:發放總額/發放總量

發券金額0.1分位均值:每分鐘發券金額按照面額大小排序,面額大的在前,面額小的在后,計算每分鐘發券金額靠前占比10%的那部分券的均值[如,發券面額排序為:10,9,8,8,6,5,4,4,2,2,那么0.1分位均值就是10]

發券金額0.2分位均值:每分鐘發券金額按照面額大小排序,面額大的在前,面額小的在后,計算每分鐘發券金額靠前占比20%的那部分券的均值[如,發券面額排序為:10,9,8,8,6,5,4,4,2,2,那么0.2分位均值就是(10+9)/2=9.5]

發放量和發券金額均值這類指標都可以用MySQL實現,那么如何實現使用MySQL查詢分位值呢?

思考

MySQL實現排序

row_number() over ( partition by a1.min order by metric_value desc) as orderNum 

metric_value表示發券金額,通過以上函數即可實現按照發券金額排序,而且是每分鐘的發券數據按照金額排序

MySQL實現topN

SELECT * FROM sales ORDER BY amount DESC LIMIT 10; 

很明顯,這種topN方式并不能實現按分鐘排序,取前N%。那我們換個思路,因為我們要先知道總量,才能知道N%有多大,所以我們需要先計算出每分鐘總量。然后再乘以N%,就知道我們需要提取N%有多少數據了。

select hour,min, count(1) as cn 
from table  
where dt=20230423 and hour=11 and min>=0 and min<=30 
group by hour,min

然后,我們再把統計結果乘以N%

select dt,a2.hour,a2.min as min,metric_value, round(cn*N%) as cn, orderNum 
from ( 
	select dt,hour,a1.min as min, 
	metric_value, row_number() over ( partition by a1.min order by metric_value desc) as orderNum 
	from table a1 
	where dt=20230423 and hour=11 and min>=0 and min<=30 
	) as a2 
inner join ( 
	select hour,min , count(1) as cn 
	from table c 
	where dt=20230423 and hour=11 and min>=0 and min<=30  
	group by hour,min ) a3
on a2.hour=a3.hour and a2.min=a3.min

這樣就可以通過比較cn(計算分位值所需要的數據量)和orderNum(當前券按面額大小排序所在順序)的大小來獲取得到前N%的數據,然后對這部分數據做avg處理,就能得到分位值數據。

調整計算邏輯融合到一起就可以得出分位值的SQL如下:

select dt,hour,min, round(avg(metric_value)) as metric_value 
from ( 
	select dt,a2.hour,a2.min as min,metric_value, round(cn*?) as cn, orderNum 
from ( 
	select dt,hour,a1.min as min,
	metric_value, row_number() over ( partition by a1.min order by metric_value desc) as orderNum 
	from table a1 
	where dt=20230423 and hour=11 and min>=0 and min<=30 
	) as a2 
inner join ( 
	select hour,min, count(1) as cn 
	from table a1 
	where dt=20230423 and hour=11 and min>=0 and min<=30 
	) as a3
on a2.hour=a3.hour and a2.min=a3.min ) as q 
where cn>orderNum 
group by dt,hour,min 
order by dt,hour,min 

cn > orderNum 表示這條數據在計算分位值統計范圍內。如果要計算0.1分位值,那么需要統計每分鐘的前10%的發券數據。按照面額排序,分鐘分組后,每條記錄都會標記這條記錄排在第幾。每分鐘發券總量再乘以10%得到cnt,這個值就是計算這一分鐘0.1分鐘均值的所需要數據量,當cnt<orderNum時,代表超出10%的限制,不再納入統計0.1分位均值的范圍。這樣就可以實現過濾出計算分位值所需數據,然后再通過avg函數就可以實現計算均值。最終結果也就是分位值的結果了。

以上就是我在業務上遇到計算分位值指標,然后通過MySQL實現計算的實現過程。

  • 說明 在使用MySQL實現計算分位值之前,分位值一直都是通過Java程序查詢每分鐘的發券數據,然后排序計算均值實現。通過程序實現最大的問題是,如果發券量比較大,那么要查詢一段時間的分位值指標,這會對程序帶來極大的壓力。事實上,我們在實際的業務上也確實存在這個問題。每次查詢2個小時的分位值數據,就會出現超百萬的數據被加載到Java程序中,這對數據查詢服務是極為可怕的。為了解決這個問題,我們必須通過MySQL的方式來實現分位值的查詢。

效果

由程序查詢明細數據計算分位值 --> MySQL實現直接查詢分位值

性能從>1min --> 15s以內;性能得到極大提升

參考

到此這篇關于MySQL實現查詢分位值的示例代碼的文章就介紹到這了,更多相關MySQL 查詢分位值內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!

標簽: MySQL
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久国产乱子精品免费女| 国产日韩欧美一区二区三区在线观看| 在线视频亚洲| 一区在线视频观看| 欧美日韩中文一区二区| 91免费精品| 日韩中文在线电影| 久久精品国产99久久| 激情久久久久久久| 91麻豆国产自产在线观看亚洲| 国产劲爆久久| 极品av在线| 亚洲一区观看| 日韩中文av| 精品欧美日韩精品| 视频二区不卡| 久久精品成人| 最新国产精品视频| 精品视频一区二区三区在线观看 | 国产99久久| 在线免费观看亚洲| 精品伊人久久久| 亚洲大全视频| 欧美日韩一区二区三区四区在线观看 | av一区在线| 国产亚洲永久域名| 国产伦精品一区二区三区在线播放| 国产自产自拍视频在线观看| 久久成人国产| 久久青青视频| 日韩精品第一| 秋霞国产精品| 婷婷国产精品| 国产精品视频一区二区三区四蜜臂 | 久久xxx视频| 免费视频亚洲| 美女久久久精品| 免费在线看一区| 久草免费在线视频| 国产精品九九| 狠狠爱成人网| 亚洲欧美久久精品| 欧美日韩水蜜桃| 精品亚洲二区| 国产日韩欧美一区二区三区 | 最新国产精品视频| 国产亚洲高清视频| 欧美一级鲁丝片| 欧美激情日韩| 国产毛片精品| 亚洲欧美日本国产 | 日本中文字幕一区二区视频| 香蕉久久99| 高清av一区| 国产精品视频一区二区三区四蜜臂| 国产视频一区免费看| 免费久久精品| 国产主播一区| 欧美福利在线| 不卡av一区二区| 精品免费av在线| 欧美成人基地| 国产传媒av在线| 国产伦乱精品| 国产一区二区三区久久久久久久久| 国产美女精品视频免费播放软件| 日韩精品一二三四| 国产亚洲亚洲| 91九色综合| 国产精品男女| 精品一区91| 精品亚洲美女网站| 欧美日韩国产高清| 亚洲1区在线| 亚洲一区二区三区在线免费| 视频一区在线视频| 奇米777国产一区国产二区| 日本视频中文字幕一区二区三区| 欧美自拍一区| а√天堂中文在线资源8| 久久婷婷av| 欧美另类综合| 日韩国产欧美在线播放| 国产精品日本一区二区不卡视频| 精品无人区麻豆乱码久久久| 99久久精品国产亚洲精品| 免费观看久久av| 三级亚洲高清视频| 国产精品欧美一区二区三区不卡| 日本黄色精品| 日韩影院免费视频| 精品国产午夜| 亚洲色图综合| 欧美国产美女| 亚洲精品日本| 日韩中文在线电影| 午夜电影一区| 99久久99久久精品国产片果冰| 日韩国产欧美视频| 国产麻豆久久| 日本一不卡视频| 久久久亚洲一区| 国产精品99精品一区二区三区∴| 天堂日韩电影| 欧美极品中文字幕| 综合激情五月婷婷| 久久婷婷久久| 最新中文字幕在线播放| 91精品一区| 中文字幕日韩欧美精品高清在线| 日韩精品2区| 国产图片一区| 蜜臀久久久99精品久久久久久| 国产精品亚洲四区在线观看| 久久国产精品99国产| 97精品国产一区二区三区| 欧美一区二区三区久久精品| 欧美va亚洲va日韩∨a综合色| 精品色999| 国产精品传媒麻豆hd| 日韩欧美美女在线观看| 香蕉成人久久| 日韩视频在线一区二区三区| 日本欧美不卡| 日韩精品一卡| 亚洲视频综合| 日韩精品中文字幕吗一区二区| 欧美a级片一区| 国产综合欧美| 午夜视频精品| 国产模特精品视频久久久久| 一区二区小说| 999国产精品999久久久久久| 欧美gv在线| 在线日韩一区| 欧美日韩国产欧| 蜜臀精品一区二区三区在线观看 | 美女av在线免费看| 亚洲精品一级二级| 91精品国产调教在线观看| 欧美一区二区三区高清视频| 午夜影院欧美| 中文字幕视频精品一区二区三区| 亚久久调教视频| 视频一区日韩| 日韩av午夜在线观看| 久久激情av| 天堂√中文最新版在线| 九九综合九九| 国产一精品一av一免费爽爽| 亚洲三级精品| 欧美日本不卡| 日韩av免费大片| 亚洲精品电影| 青草国产精品| 日韩欧美精品综合| 亚洲小说春色综合另类电影| 久久亚洲道色| 亚洲一区国产| 国产精品最新| 国产模特精品视频久久久久| 欧美成人精品午夜一区二区| 久久久蜜桃一区二区人| 日本午夜精品久久久久| 久久国产亚洲精品| 水野朝阳av一区二区三区| 欧美欧美黄在线二区| 99久久精品国产亚洲精品| 欧美日本二区| 婷婷六月综合| 精品国产亚洲日本| 日韩av网站在线免费观看| 在线一区视频观看| 国产精品chinese| 日韩一区二区三区高清在线观看| 日韩精品午夜| av最新在线| 国产一区二区三区亚洲综合| 婷婷精品久久久久久久久久不卡| 日韩国产一区| 亚洲美女91| 欧美在线资源| 精品视频在线观看网站| 欧美日韩国产一区二区在线观看| 99在线精品免费视频九九视| 一区二区三区四区日本视频| 国产极品久久久久久久久波多结野| 亚洲精品欧洲| 日韩av二区在线播放| 亚洲区国产区| 午夜久久av| 日本午夜精品一区二区三区电影| 亚洲在线免费| 首页国产欧美久久| 欧美日韩精品一本二本三本| 水野朝阳av一区二区三区| 快播电影网址老女人久久| 欧美激情综合| 国产一区二区三区四区二区| 国产麻豆精品久久|