mysql 分組中位數

2021-10-09 14:18:11 字數 1234 閱讀 3330

查詢表中每個userid的loading_time 中位數

最終sql如下

set @id1 = 0;

set @id2 = 0;

select t2.userid,

sum(if(t3.id2=t2.id25, t3.loading_time, 0)) as t25,

sum(if(t3.id2=t2.id50, t3.loading_time, 0)) as t50,

sum(if(t3.id2=t2.id75, t3.loading_time, 0)) as t75

from (

select userid,

min(t.id1) + round((max(t.id1) - min(t.id1)) / 4, 0) as id25,

min(t.id1) + round((max(t.id1) - min(t.id1)) / 2, 0) as id50,

min(t.id1) + round(3 * (max(t.id1) - min(t.id1)) / 4, 0) as id75

from (

select @id1 := @id1 + 1 as id1, userid

from matchinfo

order by userid, loading_time

) as t

group by userid

) as t2

left join (

select @id2 := @id2 + 1 as id2, userid, loading_time

from matchinfo

order by userid, loading_time

) as t3 on t2.userid=t3.userid and (t2.id25 = t3.id2 or t2.id50 = t3.id2 or t2.id75 = t3.id2)

group by t2.userid;

查詢結果

具體思路是

先將資料排序,然後每行新增遞增序號id1

算出每組id1的中間值,這個中間值所在的行就對應了中位數

中位數的中位數

參照王曉東的演算法設計 中位數的中位數,即將一串數分成n段,求其排好序了的中間那個數,再把這些所有中位數再求一次中位數。for int i 0 i r p 4 5 i 找中位數的中位數,r p 4即上面所說的n 5 int x lineselect a,p,p r p 4 5,r p 4 10 線性...

mysql 位數 MySQL中位數計算方法

在網上搜到的一種演算法是利用自增長變數進行排序,然後再根據位置序號取。感覺有些複雜了,還是group concat來的省事些 1.按順序聚合,逗號分隔,並計數 group concat number order by number asc 2.根據逗號拆分,判斷奇偶數去擷取中間位置的那個數 具體 如...

mysql計算位數 MySQL中位數計算方法

在網上搜到的一種演算法是利用自增長變數進行排序,然後再根據位置序號取。感覺有些複雜了,還是group concat來的省事些 1.按順序聚合,逗號分隔,並計數 group concat number order by number asc 2.根據逗號拆分,判斷奇偶數去擷取中間位置的那個數 具體 如...