我有一个大约1000行的表。 我想查询列的平均值" Things"从第0行到第79行。
我执行以下操作:
SELECT AVG("Things") FROM "MyTable" LIMIT 80 OFFSET 0
起初它似乎有效,我得到一个号码。
然后我尝试运行此查询只是为了测试:
SELECT AVG("Things") FROM "MyTable" LIMIT 80 OFFSET 10
我一无所获。无论我在OFFSET中输入什么数字,除非我使用零(... OFFSET 0)
,否则我什么也得不到我不确定为什么会这样。有什么想法吗?
答案 0 :(得分:1)
我在Mac上验证了sqlite 3.8.5中的问题。我不明白为什么它不起作用,但我不是一个SQL专家。
作为一种解决方法,您可以执行以下操作:
select avg("Things") from MyTable where (rowid>=10) and (rowid<=90);
但是,如果你删除了行,这并不完全相同。
这是一个更好的方法:
select avg("Things") from (select Things from MyTable limit 80 offset 10);
答案 1 :(得分:1)
OFFSET / LIMIT子句适用于查询的结果行。使用&#34; LIMIT 80&#34;,你说你想要不超过80行。
AVG()只返回一行,因此LIMIT子句无效。
要在应用AVG()之前过滤行,您需要使用WHERE或子查询。 请注意,除非您使用ORDER BY,否则没有保证行的顺序,所以在使用LIMIT时总是应该使用ORDER BY:
{ "_id" : "xyz", "minQuantity" : 5 }
{ "_id" : "jkl", "minQuantity" : 1 }
{ "_id" : "abc", "minQuantity" : 2 }