我有一个名为gcrunarrays的表,其列为{run_id,time_id,co2}。我有几千个具有不同run_id的运行,每个运行具有58个与时间相关的值,用于co2。我有一个程序来获得给定时间内所有运行的中位数co2。现在,我需要一个select语句,每次都会获得中位数。到目前为止,我有
select DISTINCT A.time_id, M.co2 from gcrunarrays A, call getMedian(1, A.time_id) M
GO
哪个会出现语法错误。我是SQL的新手,我在MYSQL工作。我已经尝试了十几种不同的措辞来表达这种说法,但现在我觉得我已经做了一些内在错误的事情。我认为如果中位数是一个函数可能会更好,但我不确定如何在不使用select语句的情况下获得中位数。非常感谢任何建议。
要获得更多说明:
表gcrunarrays
run_id | time_id | co2
1 | 1 |
1 | 2 |
...
1 | 58 |
2 | 1 |
...
2 | 58 |
3 ...
中位程序
CREATE PROCEDURE getMedian (IN e INT, t INT)
BEGIN
SELECT count(*), x.co2
FROM (SELECT B.exp_id, A.* FROM gcRunArrays A JOIN gcRuns B ON A.run_id=B.run_id WHERE B.exp_id=e and A.time_id=t) x,
(SELECT B.exp_id, A.* FROM gcRunArrays A JOIN gcRuns B ON A.run_id=B.run_id WHERE B.exp_id=e and A.time_id=t) y
GROUP BY x.co2
HAVING SUM(SIGN(1-SIGN(y.co2-x.co2))) = CEILING((COUNT(*)+1)/2);
END
GO