在mysql上我会输入以下查询,但在谷歌BigQuery上运行相同会引发上限错误。如何为查询指定限制?假设我有一个返回20个结果的查询,我只想要5到10之间的结果,我应该如何在Google BigQuery上构建查询?)
例如:
SELECT id,
COUNT(total) AS total
FROM ABC.data
GROUP BY id
ORDER BY count DESC
LIMIT 5,10;
如果我只在查询结尾处放置“LIMIT 5”,我得到前5名,如果我把“LIMIT 10”放在前10名,但是我使用什么语法来得到5到10之间
有人可以对此有所了解吗?
非常感谢任何帮助。
谢谢,祝你有个美好的一天。
答案 0 :(得分:4)
我会使用窗口函数...
之类的东西select * from
(Select id, total, row_number() over (order by total desc) as rnb
from
(SELECT id,
COUNT(total) AS total
FROM ABC.data
GROUP BY id
))
where rnb>=5 and rnb<=10
答案 1 :(得分:1)
窗口函数的答案很好,但我想我会给出另一个选项,它涉及如何获取结果而不是查询的运行方式。
如果您只需要前N行,则可以在查询中添加LIMIT N
。但是,如果您不需要前M行,则可以更改获取结果的方式。如果您正在使用java API,则可以对TableData.list()或Jobs.getQueryResults()调用使用setStartIndex()方法,仅从特定索引开始获取行。
答案 2 :(得分:0)
这个问题对于不断变化的数据集毫无意义。如果您在要求前5个和下一个5之间有1秒的延迟......数据可能已经改变。它的顺序现在不同,您将错过数据或获得重复的结果。因此,像BigTable这样的数据库有一种方法可以对数据进行一次查询,并在组中为您提供结果集。如果是这种情况:您正在寻找的是名为查询游标。我不能说这比他们自己的例子更好[以下是关于它们的文档。] [1]
但是既然你说数据没有改变那么fetch()就可以了。 fetch()有2个选项,您需要注意限制和偏移。 'limit'是要返回的最大结果数。如果设置为“无”,则将检索所有可用结果。 'offset'是要跳过的结果数。 点击此处查看其他选项:https://developers.google.com/appengine/docs/python/datastore/queryclass#Query_fetch