簡體   English   中英

sql:從jsonb列獲取不同的值

[英]sql: get distinct values from jsonb column

我正在嘗試從PostgreSQL數據庫表中獲得不同的sample_id值。 除了將它們嵌入JSONB字段之外,這還很簡單。

這是我運行select * from event limit 10時數據庫的外觀:

 id | step | event_date | event_status |           payload
----+------+------------+--------------+-----------------------------
  1 |    1 | 2018-01-10 | success      | {"x": "y", "sample_id": [0]}
  2 |    2 | 2018-01-12 | success      | {"x": "y", "sample_id": [0]}
  3 |    3 | 2018-01-14 | success      | {"x": "y", "sample_id": [0]}
  4 |    1 | 2018-01-13 | success      | {"x": "y", "sample_id": [1, 38, 63]}
  5 |    2 | 2018-01-15 | success      | {"x": "y", "sample_id": [1]}
  6 |    3 | 2018-01-17 | pending      | {"x": "y", "sample_id": [1]}
  7 |    1 | 2018-01-16 | success      | {"x": "y", "sample_id": [2]}
  8 |    2 | 2018-01-18 | success      | {"x": "y", "sample_id": [2, 55]}
  9 |    3 | 2018-08-20 | success      | {"x": "y", "sample_id": [2]}
 10 |    1 | 2018-01-19 | success      | {"x": "y", "sample_id": [3]}

對於以下輸出,我應該獲取以下數據: [0, 1, 2, 3, 38, 55, 63] (排序並不重要)。

我已經研究過使用JSONB字段函數,但是沒有運氣。 任何想法如何構造這樣的查詢?

嘗試使用jsonb_array_elements_text

select distinct jsonb_array_elements_text(payload->'sample_id') 
from event

或者,如果您希望將值作為數組而不是記錄集,則可以:

select array_agg(distinct e.v) from event 
join lateral jsonb_array_elements_text(payload->'sample_id') e(v)
on true

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM