0

我有一个名为 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
4

1 回答 1

0

使用临时表可以轻松解决问题。并且不能直接将程序结果用作表格。

存储过程/函数可以返回表吗?

于 2012-08-02T01:54:10.873 回答