我有一个表,其中存储了过去 5 天的历史温度,该表存储在基于城市的整数 [] 列中。问题是:如何查询值大于或小于指定值的条目?这是一个示例表:
+=========+==================+
| city | temps |
+=========+==================+
| Seattle | {65,72,63,56,72} |
+---------+------------------+
| Miami | {83,75,69,72,79} |
+---------+------------------+
假设我要查询温度高于 80 的城市。在此示例中,只有迈阿密的温度高于 80,因此只应返回该行。我尝试了一些没有成功的查询,查看了 intarray,但这似乎也不能解决我的问题。非常感谢!
我正在运行 PostgreSQL 9.1
假设您的表名为
readings
:查找至少一个温度大于 80 的城市:
查找所有温度都大于 68 的城市:
作为 a_horse_with_no_name 解决方案的替代方案,最简单的选择是使用
<
与数组的any
行或数组比较:请参阅SQLFiddle。
不必取消嵌套数组,就像在数组
any
和all
行集上工作一样。与使用数组运算符不同,此操作不会受益于并且不能使用索引(b-tree 或 GIN) on ,
temps
因此,如果您有许多城市和/或许多样本。temps
cities
之前我建议您可能要使用
GIN
数组索引和数组运算符,但我错了。这些不支持所需的操作;我在测试中犯了一个错误,使它们看起来像。对于频繁更新,我会将其规范化为另一个表并对该表进行 btree-index。如果只有少量数据,我不会打扰索引,我只会使用
< any (temps)
.