2017-10-07 68 views
0

分組在MySQL中,如何將一個得到某列的中位數,在我的情況「liked_count」,在多個表彙總,並將它們按另一列,在我的情況下「creator_id」?SQL從多個表獲得列的中位數,由用戶ID

只是讓我相信我是在這裏清楚;我有多列表「liked_count」和「creator_id」,我希望爲每個創建者在所有表格中獲得median_all_count,而不是每個表格。

我能得到平均水平,AVG(),但似乎沒有中間的功能。

select a.creator_id, avg(a.liked_count) as average 
from (
select creator_id, liked_count from type1 
union select creator_id, liked_count from type2 
union select creator_id, liked_count from type3 
union select creator_id, liked_count from type4 
union select creator_id, liked_count from type5 
) a group by a.creator_id order by average desc, a.creator_id desc limit 10 

編輯:我要補充一點,我需要整個事情是MySQL服務器上,而無需將數據返回到我的Web服務器,因爲數據集需要擴展到數以百萬計,該功能必須經常跑(和快速(至少在100毫秒,分50會更好),我需要能夠限制因此我添加了一個限制,我的AVG例子。我需要的,但對於中位數

+0

有沒有功能,但有一個標準的公式 – Strawberry

回答

0

至少據我所知,沒有中位數函數

可能有更好的方法來做到這一點,但是當我需要它的時候,我已經採取了最高的數量/ 2 + 1項目whe按有關專欄排序,然後進行最下面的一項。

對於我而言,這是足夠接近,但對於一個真正準確的中位數,你需要檢查,如果計數爲偶數,如果是的話得到了底部的兩個(兩個中間項),並平均它們的值。