如何限制不同的值并避免在查询

时间:2016-08-02 06:28:15

标签: mysql sql

说这是表,包括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;

但这不起作用。

1 个答案:

答案 0 :(得分:0)

也许你可以试试这个:

select * from (select A, B, C, D, E from table order by E) as temp 
group by A having count(A) <= 100