我有一個表,名爲gcrunarrays,列{run_id,time_id,co2}。我有幾千個具有不同run_id的運行,每個都有co2的58個時間相關值。我有一個程序來獲得給定時間內所有運行的中位數。現在,我需要一個select語句,每次都會獲得中位數。到目前爲止,我有MySQL - 在選擇語句中包含過程的結果
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
這是否太複雜?我可以嘗試簡化問題 – 2012-08-01 23:40:38