最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL實現(xiàn)查詢分位值的示例代碼

 更新時間:2023年04月24日 08:51:41   作者:汪汪隊倒大霉  
本文主要介紹了MySQL實現(xiàn)查詢分位值的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

背景

分位值的概念

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

業(yè)務背景

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

目前,業(yè)務梳理出如下指標需要數(shù)據(jù)的同學提供,所有指標均以分鐘為統(tǒng)計粒度:

發(fā)放量:發(fā)券總量

發(fā)券金額均值:發(fā)放總額/發(fā)放總量

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

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

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

思考

MySQL實現(xiàn)排序

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

metric_value表示發(fā)券金額,通過以上函數(shù)即可實現(xiàn)按照發(fā)券金額排序,而且是每分鐘的發(fā)券數(shù)據(jù)按照金額排序

MySQL實現(xiàn)topN

SELECT * FROM sales ORDER BY amount DESC LIMIT 10; 

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

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

然后,我們再把統(tǒng)計結(jié)果乘以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(計算分位值所需要的數(shù)據(jù)量)和orderNum(當前券按面額大小排序所在順序)的大小來獲取得到前N%的數(shù)據(jù),然后對這部分數(shù)據(jù)做avg處理,就能得到分位值數(shù)據(jù)。

調(diào)整計算邏輯融合到一起就可以得出分位值的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 表示這條數(shù)據(jù)在計算分位值統(tǒng)計范圍內(nèi)。如果要計算0.1分位值,那么需要統(tǒng)計每分鐘的前10%的發(fā)券數(shù)據(jù)。按照面額排序,分鐘分組后,每條記錄都會標記這條記錄排在第幾。每分鐘發(fā)券總量再乘以10%得到cnt,這個值就是計算這一分鐘0.1分鐘均值的所需要數(shù)據(jù)量,當cnt<orderNum時,代表超出10%的限制,不再納入統(tǒng)計0.1分位均值的范圍。這樣就可以實現(xiàn)過濾出計算分位值所需數(shù)據(jù),然后再通過avg函數(shù)就可以實現(xiàn)計算均值。最終結(jié)果也就是分位值的結(jié)果了。

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

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

效果

由程序查詢明細數(shù)據(jù)計算分位值 --> MySQL實現(xiàn)直接查詢分位值

性能從>1min --> 15s以內(nèi);性能得到極大提升

參考

https://geek-docs.com/sql/sql-examples/sql-to-calculate-the-median.html

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

相關文章

  • MySQL讀取my.cnf的順序問題詳情

    MySQL讀取my.cnf的順序問題詳情

    這篇文章主要介紹MySQL讀取my.cnf的順序問題,以mysql.server、mysqld_safe及mysqld和my_print_defaults讀取my.cnf順序展開文章介紹主題,感興趣的話大家一起來學習吧
    2021-09-09
  • 如何通過yum方式安裝mysql數(shù)據(jù)庫

    如何通過yum方式安裝mysql數(shù)據(jù)庫

    部署MySQL數(shù)據(jù)庫有多種部署方式,常用的部署方式就有三種,yum安裝、rpm安裝以及編譯安裝,這篇文章主要給大家介紹了關于如何如果通過yum方式安裝mysql數(shù)據(jù)庫的相關資料,需要的朋友可以參考下
    2024-01-01
  • mysql如何執(zhí)行流程

    mysql如何執(zhí)行流程

    MySQL主要分為server層和存儲引擎層,server層負責連接、查詢緩存、分析、優(yōu)化和執(zhí)行,存儲引擎層負責數(shù)據(jù)存儲和提取,SQL查詢執(zhí)行流程包括連接、認證、權限檢查、分析、優(yōu)化和執(zhí)行,更新語句執(zhí)行涉及重做日志(redolog)和歸檔日志(binlog)
    2024-11-11
  • 使用存儲過程實現(xiàn)循環(huán)插入100條記錄

    使用存儲過程實現(xiàn)循環(huán)插入100條記錄

    本節(jié)主要介紹了使用存儲過程實現(xiàn)循環(huán)插入100條記錄的具體實現(xiàn),需要的朋友可以參考下
    2014-07-07
  • mysql序號rownum行號實現(xiàn)方式

    mysql序號rownum行號實現(xiàn)方式

    這篇文章主要介紹了mysql序號rownum行號實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • mysql批量刪除數(shù)據(jù)方法及注意事項說明

    mysql批量刪除數(shù)據(jù)方法及注意事項說明

    這篇文章主要介紹了mysql批量刪除數(shù)據(jù)方法及注意事項說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • 常見數(shù)據(jù)庫中SQL分頁語法整理大全(附示例)

    常見數(shù)據(jù)庫中SQL分頁語法整理大全(附示例)

    數(shù)據(jù)庫分頁是數(shù)據(jù)庫管理系統(tǒng)中非常常見的一種操作,主要用于在大量數(shù)據(jù)中進行高效的瀏覽,提高用戶體驗,這篇文章主要介紹了常見數(shù)據(jù)庫中SQL分頁語法整理的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-04-04
  • Mysql?刪除重復數(shù)據(jù)保留一條有效數(shù)據(jù)(最新推薦)

    Mysql?刪除重復數(shù)據(jù)保留一條有效數(shù)據(jù)(最新推薦)

    這篇文章主要介紹了Mysql?刪除重復數(shù)據(jù)保留一條有效數(shù)據(jù),實現(xiàn)原理也很簡單,mysql刪除重復數(shù)據(jù),多個字段分組操作,結(jié)合實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2023-02-02
  • CentOS 7.2下MySQL的安裝與相關配置

    CentOS 7.2下MySQL的安裝與相關配置

    最近因為工作需要,要在CentOS上安裝MySQL,在安裝的時候遇到了一點問題,花了點時間解決了,感覺不管是官網(wǎng)還是網(wǎng)上的一些教程都不夠完整,不能一次性幫新手解決問題,于是我就結(jié)合官網(wǎng)和網(wǎng)上的資源整理了下,現(xiàn)在分享給大家,希望對有需要的朋友們能有所幫助。
    2016-11-11
  • MySQL binlog_ignore_db 參數(shù)的具體使用

    MySQL binlog_ignore_db 參數(shù)的具體使用

    這篇文章主要介紹了MySQL binlog_ignore_db 參數(shù)的具體作用,幫助大家更好的理解和使用MySQL數(shù)據(jù)庫,感興趣的朋友可以了解下
    2020-12-12

最新評論

巫山县| 盐源县| 武平县| 乌恰县| 英超| 三门峡市| 宁安市| 祥云县| 沙湾县| 德兴市| 全州县| 长武县| 临夏市| 东乡县| 临沭县| 万源市| 乌苏市| 军事| 正镶白旗| 北川| 东丰县| 新余市| 洱源县| 楚雄市| 陆川县| 石河子市| 拉萨市| 聂荣县| 崇左市| 玉环县| 渭南市| 卫辉市| 唐山市| 叶城县| 治县。| 临沭县| 平凉市| 越西县| 巨鹿县| 宁南县| 北安市|