簡體   English   中英

如何在Postgresql中選擇行數組之間的差異?

[英]How to select in Postgresql difference between arrays in rows?

我有桌子

CREATE TABLE people
(
  id bigserial NOT NULL,
  name text
  hobbies text[]
)

每天都會插入此處的數據。

現在我只有幾行了。 我想了解行之間的興趣愛好數組的區別。

例如

id |name | hobbies
1   Tom    [fishing, hunting, football]
2   James  [fishing, jogging]
3   Dave   [football, computer games]

我將第一行與第二行進行比較,將第二行與第三行進行比較(第一行中的內容不在第二行中)。 因此結果將是:

hobbies
[hunting, football, fishing, jogging]

我想檢索數組內部的差異數組。

如果要使每行差異具有一行,可以結合使用EXCEPTLEAD()

SELECT id, ARRAY_AGG(diff_hobbies)
FROM
(
  SELECT id, unnest(hobbies)
  FROM people
  EXCEPT
  SELECT id, unnest(LEAD(hobbies) OVER (ORDER BY id))
  FROM people
) t(id, diff_hobbies)
GROUP BY id
;
┌────┬─────────────────────────────┐
│ id │          array_agg          │
├────┼─────────────────────────────┤
│  1 │ {football,hunting}          │
│  2 │ {jogging,fishing}           │
│  3 │ {football,"computer games"} │ 
└────┴─────────────────────────────┘
(3 rows)

暫無
暫無

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

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