«Ни один оператор не соответствует заданному имени и типам аргументов», когда я вычитаю два столбца

#postgresql

#postgresql

Вопрос:

Я пытаюсь вычесть два столбца в 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 запросом для всех строк.

Комментарии:

1. Отредактируйте свой вопрос и объясните, какие вычисления вы пытаетесь выполнить.

2. Это потому, что вы используете текстовый тип вместо целого числа для своих столбцов.

3. Почему вы сохраняете что-то, что можно легко вычислить в запросе, когда это необходимо? Это пустая трата места для хранения в БД и может привести к расхождениям в данных. Что происходит, когда вы выполняете исходную вставку, сохраняете active_cases , а затем кто-то редактирует new_infections или один из других столбцов? active_cases Теперь вы ошибаетесь.

4. @Abelisto: Хороший улов! Я пропустил выравнивание столбцов по левому краю.

5. Вау, хорошо @Abelisto спасибо, это было глупо…

Ответ №1:

На самом деле это было потому, что мои столбцы были varchar вместо integer .