postgresql - Postgres - 使用数组元素的出现次数更新列
问题描述
我想知道是否有人可以帮助我更新 postgres 中的表格。表格有两列——一列是球员,另一列是进球数。我有一个包含记分员姓名的列表(来自应用程序的数组)。名称可以重复 - 这表明球员进了多少球。所以我需要将列表中出现的球员姓名的数量插入进球列,并确保这些进球与球员列中球员的姓名相匹配。我尝试创建临时表来测试选择它。我在考虑包含特定玩家名称的数组的基数,其中玩家名称在列表中,但问题是特定玩家名称(在本例中为 user4)是硬编码的,我希望它是动态的,
...
select cardinality
(array_positions(array['user3', 'user3', 'user4','user4','user4'], 'user4'))
where
players in ('user3', 'user4')
...
这是一张图片来说明问题,因此进球数列需要有条目(从上到下):2、3、2、1
解决方案
您可以使用该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 */
推荐阅读
- python - 在写字板中插入计时器的问题
- r - 如何构建一个字符串变量来捕获多列信息
- c# - 十六进制范围和十进制范围之间的映射
- c# - C# 默认接口实现 - 无法覆盖
- postgresql - 将 varchars 列表传递给 plpgsql 函数
- php - Laravel重定向多个指向的URL
- flutter - 颤动如何使材质appbar背景模糊颜色?
- python - Pandas DataFrame - df[df['SUMLEV'] == 50] 和 df.where(df['SUMLEV'] == 50) 有什么不同
- reactjs - 使用查询变量时出现 Gatsby 运行时错误
- android - 如何从 android 移动应用程序在笔记本电脑上访问带有主机名的 url