说这是表,包括A,B,C,D,E列。我希望按E列排序后,列A中的有限的不同值。
我知道如果没有订单,则查询下方有效:
set @num := 0, @pa = '';
select A, B, C, D, @num := if(@pa = A, @num, @num+1) as row_number, @pa := A as dummy
from table group by A having row_number <= 100;
但是,如果将“按E排序”添加到查询的末尾,则“排序依据”仅对选择了100行后的结果起作用。
我知道首先对表格进行排序并从A列中选择不同的100个值是有效的,但是以这种方式扫描整个表格。由于整个表非常大,我不想对它进行全面扫描。
因此,我的问题是如何先对它进行排序,然后在A列上选择前100个不同的值,而不扫描整个表格。
--------更新----------
我试过
set @num := 0, @pa = '';
select A, B, C, D, @num := if(@pa = A, @num, @num+1) as row_number, @pa := A as dummy
from table where row_number <= 100 order by E;
但这不起作用。
答案 0 :(得分:0)
也许你可以试试这个:
select * from (select A, B, C, D, E from table order by E) as temp
group by A having count(A) <= 100