SELECT*
FROM (
SELECT list.*, @counter := @counter +1 AS counter
FROM (select @counter:=0) AS initvar, list
ORDER BY value DESC
) AS X
where counter <= (10/100 * @counter);
ORDER BY value DESC
...
maxnum = cursor.execute(query)
for num, row in enumerate(query)
if num > .1 * maxnum: # Here I break the loop if I got 10% of the rows.
break
do_stuff...
5条答案
按热度按时间zazmityj1#
我找到的最佳答案:
更改10以获得不同的百分比。
fslejnso2#
如果你这样做是为了一个无序的,或随机的情况-我已经开始使用以下风格:
如果你需要它是随机的,但可以控制,你可以使用一个种子(例如PHP):
最后,如果这是一种需要完全控制的事情,则实际上可以添加一个列,在插入行时保存随机值,然后使用该值进行查询
时间复杂度O(n),O(n +1),O(n +1),O(n +1)
drkbr07n3#
你也可以试试看:
这是一个MySQL错误,在这里描述:http://bugs.mysql.com/bug.php?id=19795
希望能帮上忙。
xkftehaa4#
我知道这是非常旧的,但它仍然弹出作为顶部结果当你谷歌SQL限制的百分比,所以我会尽量保存你一些时间。这是很简单的做这些天。下面将给予OP他们需要的结果:
要快速随机获取表中的10%,以下代码就足够了:
vsmadaxz5#
我有一个在其他答案中没有提到的替代方案:如果您从任何一种语言访问,而您可以完全访问MySQL API(即不是MySQL CLI),则可以启动查询,询问将有多少行,然后在需要时中断循环。
例如,在Python中:
这只适用于
mysql_store_result()
,不适用于mysql_use_result()
,因为后者要求您始终接受所有需要的行。OTOH,我的解决方案的通信量可能太高-必须传输所有行。