【问题标题】:"No operator matches the given name and argument types" when I subtract two columns当我减去两列时,“没有运算符与给定的名称和参数类型匹配”
【发布时间】:2021-02-18 19:12:19
【问题描述】:

我试图在 Postgres 中减去两列并将结果保存在第三列中,但我无法真正让它工作。我使用 MacOS Postgres13.0。

我的数据库如下所示

 id  |    date    | new_infections | new_deaths | new_recovered | active_cases 
-----+------------+----------------+------------+---------------+--------------
  16 | 2020/03/21 | 111            | 0          | 12            | 
  17 | 2020/03/23 | 213            | 3          | 0             | 
  18 | 2020/03/24 | 25             | 1          | 0             | 

我先尝试了一些基本的东西,比如

SELECT *, new_infections - new_deaths AS active_cases FROM covid_stats_poland;

我也试过了

UPDATE covid_stats_poland
SET active_cases = new_infections - new_deaths - new_recovered;

但我收到“提示:没有运算符与给定的名称和参数类型匹配。您可能需要添加显式类型转换。”每时每刻。谁能给点建议?

我正在尝试进行以下计算:

new_infections - new_deaths - new_recovered

并通过查询所有行将其保存为 active_cases。

【问题讨论】:

  • 编辑您的问题并解释您要进行的计算。
  • 这是因为您的列使用的是文本类型而不是整数。
  • 为什么在需要时保存可以在查询中轻松计算的东西?这会浪费数据库中的存储空间,并可能导致数据不一致。当您执行原始插入、存储active_cases,然后有人编辑new_infections 或其他列之一时会发生什么?你的active_cases 现在错了。
  • @Abelisto:不错的收获!我错过了左侧的列对齐方式。
  • 哇,好的@Abelisto,谢谢,那太愚蠢了......

标签: postgresql


【解决方案1】:

其实是因为我的专栏是varchar,而不是integer

【讨论】:

    猜你喜欢
    • 2013-01-20
    • 1970-01-01
    • 2014-09-05
    • 1970-01-01
    • 1970-01-01
    • 2021-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多