我有一个名为 gcrunarrays 的表,其中包含 {run_id、time_id、co2} 列。我有数千次具有不同 run_id 的运行,每次运行都有 58 个与时间相关的 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