2011-04-02 63 views

回答

8

这实际上是一个duplicate question,但是我现在有一个更好的,单通,快,回答:

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 
+2

实际上它是两次传递(一个来自表,一个来自派生),但仍然是O(N)而不是O(N^3),链接中接受的答案题。 OTOH,我在复制中的原始答案略快,虽然它需要批量而不是单个查询。 – RichardTheKiwi 2011-04-02 10:01:29