【问题标题】:SQL Updating column in new table with arithmetic function from column in another tableSQL使用另一个表中列的算术函数更新新表中的列
【发布时间】:2017-11-18 06:35:14
【问题描述】:

我有两张桌子:

表 1 的一部分:

 id  |  per  |  va   | gp | minutes 
-----+-------+-------+----+---------
   1 | 11.87 |  14.5 | 69 |    16.1
   2 | 17.07 | 154.9 | 78 |    23.9
   3 |  4.30 |  -8.6 | 21 |     4.4
   4 |  5.68 | -42.2 | 52 |     9.3
   5 | 19.46 | 347.8 | 82 |    32.1
   6 | 18.26 | 125.3 | 47 |    23.3
   7 | 12.76 |  79.0 | 82 |    28.5
   8 |  9.19 |  -3.7 | 13 |    14.8
   9 | 21.15 |  10.7 | 10 |     6.8
  10 | 14.38 |  46.1 | 31 |    25.7

表2:

 player |           prl           | position 
--------+-------------------------+----------
 1      |                         | 
 2      |                         | 
 3      |                         | 
 4      |                         | 

我正在尝试通过获取表 1 中的这些列并按 - ((67*va)/(gp*minutes)) 计算 prl。我当然可以在将其插入 prl 列之外进行计算,但找不到将其放入 prl 的方法。我得到的最接近的是这样做:

update hwk2
set prl = per - ((67*va)/(gp*minutes)) from more_player_stats;
UPDATE 1904

这在整个 prl 列中给了我相同的结果。任何人都可以帮助这个全新的 sql 用户吗?

【问题讨论】:

  • 你能告诉我们这两个表是如何逻辑连接的吗?
  • 第一张表格是一堆球员的NBA数据,但没有列出球员的位置。所以有一个 NBA 分析师创建的统计数据是“prl”,它的公式就是我所描述的。基本上,prl 应该取大约 4 个值(大前锋 11.5,控球后卫 11,中锋 10.6,等等)所以我试图从表 1 中的列中获取球员的位置,如果这有帮助并计算每个球员的位置'prl' 基于这些统计数据。
  • 让我重新表述我的问题。我们如何将第二张表中的玩家与第一张表中的统计数据联系起来?
  • 哦,已经完成了。我已经将 player 列作为 id 号插入了 - 我只是想让 prl 列与原始帖子中的公式相等。
  • 我们在兜圈子。我们已经知道第二张桌子上有玩家编号。但不清楚的是如何将这些玩家连接到第一张桌子。

标签: sql postgresql join sql-update


【解决方案1】:

使用更新连接:

UPDATE hwk2 AS t1
SET prl = t1.per - ((67*t1.va) / (t1.gp*t1.minutes))
FROM more_player_stats AS t2
WHERE t1.player = t2.id;

这是关于 SO 的 link to a reference question,涵盖 Postgres 中的更新。

【讨论】:

  • 非常感谢!我试过这个并不断收到提示:没有运算符与给定的名称和参数类型匹配。您可能需要添加显式类型转换。
  • 我在那里缺少别名。不确定选角;如果涉及的所有列都是数字,则应该没有问题。
  • 非常感谢 - 这非常有帮助。我会玩弄它的。可能我在桌子上做了一些奇怪的事情。欣赏!
  • 我刚收到!我必须做 where t1.player::numeric = t2.id::numeric;不知道为什么,但我明白了。非常感谢!
  • 这很奇怪,但很高兴你想通了。
猜你喜欢
  • 2011-04-18
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-18
  • 2021-12-22
  • 1970-01-01
相关资源
最近更新 更多