1. 程式人生 > >postgresql中獲取json資料和聚合函式的使用

postgresql中獲取json資料和聚合函式的使用

在postgresql中檢查json陣列相關知識如下:

假如有一張表test,資料如下:


1.查詢json陣列中的資料,用 '-> '獲取JSON物件欄位,'->>' 獲取JSON物件欄位作為文字:

1)select param,param->>'data'as  param2 from test    ;


param2結果為JSON物件欄位

2)select param,param->>'data'as  param2 from test   ;

param2結果為text文字

2.檢查JSON陣列是否包含一個字串,切換到jsonb,用  ?  檢查

1)select * from test where param::jsonb?'status';


以上方法過濾JSON陣列中包含“status”欄位的資料

3.若json陣列中巢狀json陣列,用->和?檢查或者用傳統的的like關鍵字

1)select * from test   where (param->'data')::jsonb?'status';

2)select * from test   where (param->>'data') LIKE '%"status"%';

兩條sql執行結果一致為:


postgresql 從 9.2 開始增加對 JSON 的支援。9.5 已經支援多個 JSON 函式。

例表為users:


4.row_to_json() 函式,接受 “行值”並返回 JSON 物件

select row_to_json(e) from (select * from users)e

結果為:


5.array_agg 是一個聚合函式 sum 或 count,它聚整合一個 PostgreSQL 陣列引數,array_to_json 以 PostgreSQL陣列 拼合成一個單一的JSON值

select array_to_json(array_agg(e)) from (select * from users)e

結果為:

6.結合這幾個聚合函式,寫一個例子為:

select row_to_json(t) 
from (select name,pwd ,(select array_to_json(array_agg(e)) 
                        from (select * from channel)e) as list from users)t
where name = 'qxj' ;