標準偏差や平均値をグループ毎の上位に関して出したい

投稿者: Anonymous

select avg(point) from table where (genre毎のpoint上位100位まで) GROUP BY genre;

みたいな事がしたいのですが、どうすれば良いでしょうか?
ポイント上位を入れたテーブルを作るくらいしか思いつかなかったので…

解決

最初は IN 演算子とサブクエリで処理しようとしたのですが、以下のエラーメッセージが表示されるので、

MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery

ユーザ定義変数(user-defined variable)とサブクエリを使ってみました。

SET @num := 0, @genre := '';
SELECT t.genre, avg(t.point) AS average
FROM (
  SELECT t2.genre, t2.point,
    @num := IF(@genre = t2.genre, @num + 1, 1) AS rownum,
    @genre := t2.genre
  FROM test2 AS t2
  ORDER BY t2.genre ASC, t2.point DESC
) AS t WHERE t.rownum <= 100 GROUP BY t.genre;
回答者: user9156

Leave a Reply

Your email address will not be published. Required fields are marked *