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' ;