MySQL:计算中值

时间:2013-03-11 12:28:48

标签: mysql median

我试图计算价格的中位数。 我在这里找到了如何做到的答案 - Simple way to calculate median with 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

1 个答案:

答案 0 :(得分:2)

AFAIU你的问题。

@velcrow的

This answer成功计算中值。不幸的是,当存在偶数行而不是计算2个中间行的平均值时,查询只返回第二个值。我对查询进行了一些修改以满足您的需求:

--average value for middle rows
SELECT avg(t1.price) as median_val FROM (
SELECT @rownum:=@rownum+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