У меня очень простая таблица:
CREATE TABLE IF NOT EXISTS LuxLog (
Sensor TINYINT,
Lux INT,
PRIMARY KEY(Sensor)
)
Он содержит тысячи журналов с разных датчиков.
Хотелось бы иметь Q1 и Q3 для всех датчиков.
Я могу выполнить один запрос для всех данных, но для меня было бы лучше иметь один запрос для всех датчиков (получение Q1 и Q3 обратно из одного запроса)
Я подумал, что это будет довольно простая операция, поскольку квартили широко используются и являются одной из основных статистических переменных при расчете частоты. По правде говоря, я нашел множество чрезмерно сложных решений, в то время как я надеялся найти что-то изящное и простое.
Кто-нибудь может мне намекнуть?
Изменить: это фрагмент кода, который я нашел в Интернете, но он не работает для меня:
SELECT SUBSTRING_INDEX(
SUBSTRING_INDEX(
GROUP_CONCAT( -- 1) make a sorted list of values
Lux
ORDER BY Lux
SEPARATOR ','
)
, ',' -- 2) cut at the comma
, 75/100 * COUNT(*) -- at the position beyond the 90% portion
)
, ',' -- 3) cut at the comma
, -1 -- right after the desired list entry
) AS `75th Percentile`
FROM LuxLog
WHERE Sensor=12
AND Lux<>0
Я получаю 1 как возвращаемое значение, хотя это должно быть число, которое можно разделить на 10 (10,20,30 ..... 1000)
NTILE()
). - person John Bollinger   schedule 03.07.2015