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
英文版 https://c.scudata.com/article/1723025287983