当字段稀疏时,使用 SQL 从用户最喜欢的项目集中获取项目的最喜欢计数

Get Item's favorite count from user's favorite itemset using SQL when field is sparse

有 2 个 table,ItemUser

例如:

项目

id
11
22
33

用户

id favorite_itemset
A [22, 33]
B [22]

我想要如下结果。

item id favorite count
11 0
22 2
33 1

由于 favorite_itemset 字段稀疏,而用户 table 很大。有比使用 UNNEST 更好的方法吗? (急板)

任何帮助将不胜感激! 感谢您阅读本文。

您可以使用 UNNEST 将数组扩展为关系,然后按项目 ID 分组并与项目连接:

WITH item(id) AS
(
  VALUES
        (11),
        (22),
        (33)
), 
user(id,    favorite_itemset) AS
(
  VALUES
        ('A',   ARRAY[22, 33]),
        ('B',   ARRAY[22])
)
  


SELECT id,
    coalesce(cnt, 0) as favorite_count -- turn nulls into zeroes
FROM item 
LEFT OUTER JOIN 
    (SELECT item_id,
         count(*) AS cnt
    FROM USER
    CROSS JOIN UNNEST(favorite_itemset) AS t(item_id)
    GROUP BY  item_id )
    ON id = item_id 

输出:

id favorite_count
11 0
22 2
33 1