2013-03-11 3 views
1

가격의 중앙값을 계산하려고합니다. 여기에 대답하는 방법을 찾았습니다. Simple way to calculate median with MySQL,하지만 저에게는 효과가 없습니다. 결과가 비어 있습니다. 아무도 도와 줄 수 있습니까?MySQL : 중간 값 계산

SELECT x.price from mediana as x, mediana y 
GROUP BY x.price 
HAVING SUM(SIGN(1-SIGN(y.price-x.price))) = (COUNT(*)+1)/2 
+0

당신이 sqlfiddle 이것을 설명 할 수 있습니까? –

+0

링크 된 질문에서 가장 많이 투표 한 (받아 들일 수없는) 대답을 시도해 보셨습니까? [실행 예] (http://sqlfiddle.com/#!2/fbd31/6) –

+0

http://sqlfiddle.com/#!2/b3fe7e/1 – Alex

답변

2

AFAIU.

This answer @velcrow는 중간 값을 성공적으로 계산합니다. 불행히도 2 개의 중간 행의 평균값을 계산하는 대신 행 수가 짝수 일 때 쿼리는 두 번째 값을 반환합니다. 나는 당신의 요구에 맞게 쿼리 수정의 몇했습니다 :

--average value for middle rows 
SELECT avg(t1.price) as median_val FROM (
SELECT @rownum:[email protected]+1 as `row_number`, d.price 
    FROM mediana d, (SELECT @rownum:=0) r 
    WHERE 1 
    -- put some where clause here 
    ORDER BY d.price 
) as t1, 
(
    SELECT count(*) as total_rows 
    FROM mediana d 
    WHERE 1 
    -- put same where clause here 
) as t2 
WHERE 1 
--this condition should return one record for odd number of rows and 2 middle records for even. 
AND t1.row_number>=total_rows/2 and t1.row_number<=total_rows/2+1; 

Test on sample data on sqlfiddle

+0

이것은 잘못된 결과를 반환하고 2를 반환합니다. –

+0

1,2,3,4의 가격은 1,2,3,4,4가 3을 반환하므로 2.5를 반환합니다. – Alex