相当于PostgreSQL中Python的Map运算符

时间:2017-07-21 12:07:36

标签: sql postgresql

我在PostgreSQL DB中有一个像这样的表。

ID, Name, scores.
10, abc,{23,19,34}
11, def, {2333,233,24}
12, ghi, {321,34}
13,hio,{}

上述数据模型中的分数是数组或数字列表。

现在我们必须找到所有得分为19分的学生,除以10.我怎样才能达到这个目标?

我试过这个,但它没有用。

SELECT * FROM students where 19 = ANY(scores)/10

这样的事情很有效。但是我们需要一个更好的解决方案(可能使用倒排索引),因为行数量达到数百万。

SELECT * FROM students where 190 <= ANY(scores) < 200

1 个答案:

答案 0 :(得分:1)

在您的数据示例中,没有记录符合您的某些值的条件,除以10 = 19。但是我知道你确定你的条件是,当除以10时,数组中的单个数字应该等于19.不是所有或某事的总和?

首先你在得分列上有杜松子酒指数吗? 第二 - 你的得分数组中的单个数字会比int限制更大吗?如果不是bigint只会减慢您的查询速度。 考虑bigint问题,如果你必须得到它,否则从下面的查询中删除:: bigint

1 BHK Apartment for sale in Kalyan

它很丑,但可能比从数组首先提取所有数字然后将它们除以10然后比较为19的尝试更快。 如果你只是在除以10之后搜索等于19的数字得分,那么只需使用Abelisto的方法,但在插入期间它将是一个杀手,作为数百万行的保存函数索引,长数组将会很慢。