首页 > 解决方案 > Postgres - 使用数组元素的出现次数更新列

问题描述

我想知道是否有人可以帮助我更新 postgres 中的表格。表格有两列——一列是球员,另一列是进球数。我有一个包含记分员姓名的列表(来自应用程序的数组)。名称可以重复 - 这表明球员进了多少球。所以我需要将列表中出现的球员姓名的数量插入进球列,并确保这些进球与球员列中球员的姓名相匹配。我尝试创建临时表来测试选择它。我在考虑包含特定玩家名称的数组的基数,其中玩家名称在列表中,但问题是特定玩家名称(在本例中为 user4)是硬编码的,我希望它是动态的,

...
select cardinality
   (array_positions(array['user3', 'user3', 'user4','user4','user4'], 'user4'))
where
    players in ('user3', 'user4')
...

这是一张图片来说明问题,因此进球数列需要有条目(从上到下):2、3、2、1

更新 dable 与进球插图

标签: postgresql

解决方案


您可以使用该unnest函数将数组转换为表格并计算每个玩家的出现次数:

SELECT player,
       count(*) AS goals
FROM unnest(ARRAY['user3', 'user3', 'user4', 'user4', 'user4']) AS player
GROUP BY player;

 player | goals 
--------+-------
 user3  |     2
 user4  |     3
(2 rows)

然后,您可以将其插入到表中

INSERT INTO goals_table (player, goals)
SELECT /* the query from above */

推荐阅读