Tra*_*lio 7 postgresql json greatest-n-per-group
我有一个使用 JSON 类型的列。我想执行查询以选择 JSON 字符串中特定字段的所有不同记录:即给定这三个文档
{
id: 1,
s: "foo"
},
{
id:2,
s: "bar"
},
{
id:3,
s: "foo"
},
Run Code Online (Sandbox Code Playgroud)
查询必须检查“s”键是否有不同的值,并返回 ID 为 1 和 2 的文档。
Erw*_*ter 12
假设Postgres 9.4列中有一个JSON 数组,这将完成这项工作: jsonb
SELECT DISTINCT ON (doc->'s') doc
FROM (
SELECT '[
{
"id":1,
"s":"foo"
},
{
"id":2,
"s":"bar"
},
{
"id":3,
"s":"foo"
}]'::jsonb AS j
) t
, jsonb_array_elements(t.j) WITH ORDINALITY t1(doc, rn)
ORDER BY doc->'s', rn;
Run Code Online (Sandbox Code Playgroud)
或者,除非s
是嵌套对象,否则折叠text
值而不是jsonb
(子)记录可能更便宜。只需使用运营商 ->>
,而不是->
在这种情况下。结果是一样的:
doc
----------------------
'{"s": "bar", "id": 2}'
'{"s": "foo", "id": 1}'
Run Code Online (Sandbox Code Playgroud)
t
用您的实际表替换子查询。
关键元素是jsonb_array_elements()
(或json_array_elements()
)LATERAL
与WITH ORDINALITY
Postgres 特定的DISTINCT ON
.
相关,有更多解释:
归档时间: |
|
查看次数: |
25952 次 |
最近记录: |