【问题标题】:Postgres query filter by non column in tablePostgres查询按表中的非列过滤
【发布时间】:2021-12-17 22:45:21
【问题描述】:

我有一个挑战,其在于过滤查询不是使用表中不存在的值而是由函数检索的值。

让我们考虑一个包含数据库中所有销售额的表

id, description, category, price, col1 , ..... col n

我有一个功能可以从一个表中检索到一个类似的销售表(基于规则和业务逻辑)。该函数再次对sales表中的所有记录进行查询,并对部分字段进行匹配验证。

similar_sales (sale_id integer) - > returns a integer[]

现在我需要为销售表中的每一项列出所有类似的销售额。

select s.id, similar_sales (s.id)
from sales s

但similar_sales 可以为空,我只对包含至少一个的退货销售感兴趣。

select id, similar
from (
    select s.id, similar_sales (s.id) as similar
    from sales s 
) q
where #similar > 1 (Pseudocode)
limit x

我无法在子查询中进行限制,因为我不知道哪些销售有相似之处。 我只是想对一组小行而不是整个表进行子查询以获得查询性能提升(分页策略)

【问题讨论】:

  • 不确定你的问题是什么,how to count values in postgres array?
  • 或者,让你的函数返回NULL而不是一个空数组(如果你使用聚合,它可能已经这样做了),然后只写where similar is not null

标签: postgresql


【解决方案1】:

你可以试试这个:

select id, similar
from sales s
cross join lateral similar_sales (s.id) as similar
where not isempty(similar)
limit x

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多