SQL,拆分两列后计算交集成员数

postgresql的表T的items_current_order和items_next_order字段是逗号分隔的字符串,成员有重复,外面有括号。


client_id

order_id

items_current_order

items_next_order

1

905562

4254677

{1,1,1}

{1,1}

2

905562

4254645

{1,2,5,6}

{1,1,6}

3

905562

4254646

{3,3,3,6,6,9,10}

{3,3,6,6}

请给该表增加计算列 count,要求是:将items_current_order分别拆分成成员可重复的集合,计算两者的交集。


client_id

order_id

items_current_order

items_next_order

count

1

905562

4254677

{1,1,1}

{1,1}

2

2

905562

4254645

{1,2,5,6}

{1,1,6}

2

3

905562

4254646

{3,3,3,6,6,9,10}

{3,3,6,6}

4

编写SPL代码:


A

1

=pg1.query("select * from T")

2

=A1.derive((left(mid(#3,2),-2).split@c() ^ left(mid(#4,2),-2).split@c()).len():count)

函数derive增加计算列,#3表示第3个字段,也可直接用字段名。split可拆分字符串, @c表示按逗号拆分。^是求交集符号。

来源:https://stackoverflow.com/questions/78453352/how-to-get-count-values-array1-in-array2