我有一张桌子:
client_id | 订单_id | items_current_order | items_next_order |
---|---|---|---|
905562 | 4254677 | {1,2,4} | {1} |
905562 | 4254645 | {1,2,5,6} | {1, 6} |
我需要计算 items_current_order 中包含的 items_next_order 中的商品比例。
例如,对于 order_id = 4254645,份额应为 50%(或 0.5),因为 4 个 items_next_order 商品中只有 2 个包含在 items_current_order 中。
我尝试像这样计算金额(而不是份额)::
SELECT
client_id ,
COUNT(1) AS count_values
FROM
(SELECT
client_id ,
unnest(items_next_order) AS value
FROM
orders
GROUP BY
1, 2) AS a
WHERE
value = ANY (SELECT unnest(items_current_order) FROM orders as rj WHERE rj.client_id = a.client_id )
GROUP BY
client_id
但是我需要按 client_id , order_id 进行分组
我期望的结果:
client_id | 订单_id | items_current_order | items_next_order | 分享 |
---|---|---|---|---|
905562 | 4254677 | {1,2,4} | {1} | 0.33 |
905562 | 4254645 | {1,2,5,6} | {1, 6} | 0.5 |
这是一个有效的查询,可以完成您想要做的事情:
SELECT
order_id,
items_current_order,
items_next_order,
(
SELECT COUNT(*) FROM unnest(items_current_order) AS i
WHERE i = ANY(items_next_order)
)::FLOAT / array_length(items_current_order,1)::FLOAT AS share
FROM T
说明:
unnest
相结合来迭代 items_current_order
的项目并计算 items_next_order
中包含多少个项目。items_current_order
数组的长度即可得到比率