Вычислить среднее значение 2,3 квартиля в SQL

Я хочу написать хранимую процедуру в 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 он будет иметь намного лучшую общую производительность. Я буду очень признателен за помощь.

13
задан munch 9 August 2011 в 08:10
поделиться