【问题标题】:PostgreSQL filter and order by arrayPostgreSQL 按数组过滤和排序
【发布时间】:2016-03-15 10:41:37
【问题描述】:

我有一个表,其中包含我想要匹配的数组。通过使用&& 运算符进行匹配:

SELECT * FROM table WHERE data && ARRAY['foo','bar'];
id | data
---+----------
 1 | {foo}
 2 | {bar}
 6 | {bar,foo}

我现在想要的下一件事也是按照它们在该数组中的顺序对它们进行排序,例如:

SELECT * FROM table WHERE data && ARRAY['foo','bar'] ORDER BY data && ARRAY['foo','bar'];
id | data
---+----------
 1 | {foo}
 6 | {bar,foo}
 2 | {bar}

这可能吗?

【问题讨论】:

  • 可能类似于ORDER BY position( 'foo' in array_to_string(data, ',') ), position( 'bar' in array_to_string(data, ',') )
  • @Patrick dataTEXT[] 列。
  • @HannoBinder 看起来像是一个解决方案,但是如果我不知道要比较的数组的长度怎么办。就我而言,我首先从另一个列/表中选择该数据。
  • @Patrick 我的错误col 应该是data,我更新了我的问题。
  • “我首先从另一个列/表中选择该数据”——您确定数组是存储数据的正确方式吗?似乎加入可以做你需要的。

标签: arrays postgresql sql-order-by


【解决方案1】:

这可能不是最佳模式,但应该可以。

选择 ... ORDER BY data && ARRAY['bar'], data && ARRAY['foo'];

或者...

ORDER BY 'bar' = ANY(data) desc, 'foo' = ANY(data) desc;

【讨论】:

    猜你喜欢
    • 2013-03-17
    • 1970-01-01
    • 2017-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-26
    • 2019-01-02
    相关资源
    最近更新 更多