Я хочу написать хранимую процедуру в SQL (MySQL), чтобы вычислить среднее значение второго и третьего квартилей.
Другими словами, у меня есть записи для измерений, сколько времени требуется для загрузки URL-адреса. Записи - это (id, url, time), и они содержат много измерений для каждого URL-адреса. То, что я пытаюсь сделать, это для каждого URL-адреса удалить самый низкий и верхний 25% (т.е. Нижний и верхний квартили) и вычислить среднее значение оставшихся 25% -75% времени загрузки. И сохраните это в другой таблице.
Я видел несколько примеров для этого для MS SQL и, казалось, был относительно простым. Но я должен использовать MySQL, где:
- Предложение LIMIT не поддерживает проценты (нет аналога для выбора 25%)
- Предложение LIMIT не поддерживает его аргументы как переменные (только константы)
- функции не поддерживают динамический SQL (например, PREPARE и EXECUTE)
И я добрался до места:
create procedure G(
IN val VARCHAR(10)
)
Begin
select @cnt:=count(*) from test where a=val;
select @of:= @cnt /4;
SELECT @len:= @cnt/2;
Prepare stmt from 'select * from test where a="a" LIMIT ?,?';
execute stmt using @of, @len;
END;
Я могу написать его на PHP, но думаю, что в SQL он будет иметь гораздо лучшую общую производительность. Я буду очень благодарен за помощь.