gpt4 book ai didi

mysql - 如何限制不同的值并避免在查询中使用 order by 扫描整个表

转载 作者:行者123 更新时间:2023-11-30 22:14:57 24 4
gpt4 key购买 nike

这里是表格,包含 A、B、C、D、E 列。在按 E 列排序后,我想从 A 列中获取有限的不同值。

我知道如果没有 order by,下面的查询有效:

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;

但这行不通。

最佳答案

也许你可以试试这个:

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

关于mysql - 如何限制不同的值并避免在查询中使用 order by 扫描整个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38713177/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com