ОБНОВЛЕНИЕ : Гораздо более продуманное объяснение предмета от гораздо более знающего человека здесь .Тем не менее, кажется, что в MySQL нет функции встроенного для вычисления процентилей.
Попробуйте:
ВЫБРАТЬ * ОТ цены ГДЕ цена> = (ВЫБРАТЬ 0,9 *max (цена) ОТ цены)
SELECT price FROM prices p1 WHERE
(SELECT count(*) FROM prices p2 WHERE p2.price >= p1.price) <=
(SELECT 0.1 * count(*) FROM prices)
);
Это даст цену P1 , для которой количество записей в Цена таблица, имеющая цена>= P1 будет составлять одну десятую от общего количества записей в таблице Price .После этого:
SELECT * FROM prices WHERE price >= (SELECT price FROM prices p1 WHERE
(SELECT count(*) FROM prices p2 WHERE p2.price >= p1.price) <=
(SELECT 0.1 * count(*) FROM prices)
);
вернет все нужные записи.
Примечание: Я не проверял производительность этого запроса, я думаю, что решение с временной таблицей / переменнойдолжен быть более эффективным.