2011-04-02 142 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