2012-06-18 5 views

답변

0

이 조금 긴이지만, 작업을 수행하고, 합리적으로 빨리.

SELECT x.group_field, 
     avg(
      IF( 
       ABS(x.rank - y.vol/2) < 1, 
       value_field, 
       null 
      ) 
     ) as median 
FROM (
    SELECT group_field, value_field, 
      @r:= IF(@current=group_field, @r+1, 1) as rank, 
      @current:=group_field 
    FROM (
     SELECT group_field, value_field 
     FROM table_name 
     ORDER BY group_field, value_field 
    ) z, (SELECT @r:=0, @current:='') v 
) x, (
    SELECT group_field, count(*) as vol 
    FROM table_name 
    GROUP BY group_field 
) y WHERE x.group_field = y.group_field 
GROUP BY x.group_field 
관련 문제