В книге «SQL for Smarties» приведен пример кода для вычисления первой медианной даты.Дата первого медиана по 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?
Это называется «коррелированным подзапросом» (вы можете посмотреть это). Существуют и другие способы расчета медианы. –