[英]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]
我想檢索數組內部的差異數組。
如果要使每行差異具有一行,可以結合使用EXCEPT
和LEAD()
:
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.