这里说的是表格,列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;
但是,如果“ORDER BY E”被添加到的结束查询,'order by'仅在选择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;
但这不起作用。
为什么它不工作?没有你的数据对不起?只是问问。任何返回值 –
它有语法问题。查询无法以这种方式找到'row_number'。 – Cuero
好的,你现在没有任何问题吗? –