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