2017-10-07 11 views
0

MySQLでは、特定のカラムのメジアンを「liked_count」で複数のテーブルにまたがって集計し、私の場合は「creator_id」ですか?ユーザIDでグループ化された複数のテーブルからカラムの中央値を取得するためのSQL

私はここではっきりしていると確信しています。私は複数のテーブルに "liked_count"と "creator_id"を持っているので、それぞれのテーブルではなく、すべてのテーブルの中で各クリエイターのメイキングlik_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サーバ上にあるように全体の事を必要とすることを追加する必要があり、この機能をする必要があります頻繁に実行してください(少なくとも100ms以下であれば、50を下回るほうが良いでしょう)。制限する必要があるため、私はAVGの例に制限を加えましたが、私はそれを必要としますが、中央値にしてください。

+0

機能はありませんが、標準的な式があります – Strawberry

答えて

0

私が知る限りでは、中央値関数はありません

おそらくもっと良い方法がありますが、私がそれを必要とするときには、トップカウント/ 2 + 1個の項目を取っています問題のコラムで注文され、次にそのうちの1つを取った。

本当に正確な中央値のためには、カウントが偶数であるかどうかをチェックし、その場合は底2(中間の2つのアイテム)を得、その平均値を平均する必要があります。

関連する問題