使用OFFSET和LIMIT获得一系列行的平均值?

时间:2015-10-09 21:41:30

标签: sqlite

我有一个大约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)

,否则我什么也得不到

我不确定为什么会这样。有什么想法吗?

2 个答案:

答案 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 }