Select TOP X (or bottom) percent for numeric values in MySQL

I was wondering if there are any functions that can be used in MySQL to select the TOP X(or bottom) percent from a column containing numeric values.

Basically, I have a column containing a list of prices and I only want to return those fields in the top ten percentile of prices. Any suggestions?


just as an FYI (i know this question is a few years old), this can be done other, cleaner ways as well.

SELECT * FROM product_table WHERE price >= (SELECT price FROM product_table 
ORDER BY price DESC LIMIT 1 OFFSET (SELECT 0.1 * COUNT(*) FROM product_table));

i ran a similar query over a very large database, and it ran very quickly.


EDIT - new answer

Answered in Convert SQL Server query to MySQL

Select *
from
(
    SELECT tbl.*, @counter := @counter +1 counter
    FROM (select @counter:=0) initvar, tbl
    ORDER BY ordcolumn
) X
where counter <= (50/100 * @counter);
ORDER BY ordcolumn


OLD ANSWER

For MySQL, you could calculate the batch size required and then LIMIT to that number of records

SELECT @rows := ROUND(COUNT(*) * 10/100) FROM table;
PREPARE STMT FROM ‘SELECT * FROM tbl ORDER BY price LIMIT ?’;
EXECUTE STMT USING @rows;

For a bottom percent, just order in reverse

SELECT @rows := ROUND(COUNT(*) * 10/100) FROM table;
PREPARE STMT FROM ‘SELECT * FROM tbl ORDER BY price DESC LIMIT ?’;
EXECUTE STMT USING @rows;

Oops, maybe the DESC belongs in the first query, but you get the meaning.

Note For SQL Server, the TOP N PERCENT clause certainly helps

select top 10 PERCENT *
FROM TBL
ORDER BY price