는 단지 재미를 위해 내가 여기 t1
을 변경하지 마십시오 sqlFiddle
SELECT
CASE
WHEN MOD((select count(*) as count from t),2)=1 THEN
(select val from
(select @row:[email protected]+1 as row,val
from t,(select @row:=0)r
order by val)t1
where t1.row = CEIL((select count(*) as count from t)/2)
)
ELSE
((select val from
(select @row:[email protected]+1 as row,val
from t,(select @row:=0)r
order by val)t1
where t1.row = (select count(*) as count from t)/2)+
(select val from
(select @row:[email protected]+1 as row,val
from t,(select @row:=0)r
order by val)t1
where t1.row = ((select count(*) as count from t)/2)+1))/2
END AS median
그냥 테이블 이름으로 t
의 발행 수를 바꾸기 ', 내가 시도와 MySQL에서 모든 것을 할 생각. 또한 테이블에 행이 없으면 중간 값으로 NULL이 반환됩니다.
이 질의는 또한 그것은 2 열하는 rowcount
열과 median
열을 반환 것 아래 (sqlFiddle)
SELECT @rowCount:=(select count(*) as count from t) AS rowcount,
(select AVG(val) from
(select @row:[email protected]+1 as row,val
from t,(select @row:=0)r
order by val)t1
where t1.row IN (FLOOR((@rowCount+1)/2),
CEIL((@rowCount+1)/2)
)
) as Median
로 감소 될 수있다. 이전 쿼리와 같이 여러 번 계산하지 않으려 고했기 때문에 rowcount
열을 넣었습니다.
PHP에서 그냥하고 싶다면 모든 값을 빼고, 배열에 넣고, 배열을 정렬하고, 중앙값을 찾으십시오. – user602525
그렇게 느리지 않니? 정렬하고 중간 값을 찾으십니까? – Ranveer
글쎄 데이터 세트에 따라 다릅니다. 나는 지금 당장 일어난 일을 토대로 갈거야. – user602525