0
「Smart for Smarties」的SQL書籍顯示計算日期的第一中位數的示例代碼。SQL的日期首位中位數
我把這個例子放在這裏。 http://sqlfiddle.com/#!3/c69520/1
---duplicate to ensure even number of rows
CREATE VIEW Temp1
AS SELECT weight FROM Parts
UNION ALL
SELECT weight FROM Parts;
---below this part is what I didn't understand how it works
CREATE VIEW Temp2
AS SELECT weight
FROM Temp1
WHERE
(SELECT COUNT(*) FROM Parts)
<= (SELECT COUNT(*)
FROM Temp1 AS T1
WHERE T1.weight >= Temp1.weight)
AND (SELECT COUNT(*) FROM Parts)
<= (SELECT COUNT(*)
FROM Temp1 AS T2
WHERE T2.weight <= Temp1.weight);
SELECT AVG(DISTINCT weight) AS median
FROM Temp2;
結果是正確的,雖然這個解決方案在時間和存儲方面都很昂貴。
真的很想知道這部分是如何工作的?
我試着看到內部SQL語句的結果。
(SELECT COUNT(*)
FROM Temp1 AS T1
WHERE T1.weight >= Temp1.weight)
,並得到了消息
多部分標識符「Temp1.weight」無法綁定。
如何理解這個SQL?
這被稱爲「相關的子查詢」(你可以看看)。還有其他計算中位數的方法。 – 2014-10-05 12:16:04