Postgresql Макс из группы - PullRequest
       4

Postgresql Макс из группы

0 голосов
/ 18 сентября 2018

Попытка добавить флаг к максимальному значению bscmpnstntotal в каждом объекте.Это данные о вознаграждении, где objectid представляет конкретную организацию, а bscmpnstntotal равно общему вознаграждению для данного сотрудника.Мне нужен флаг, который указывает, кто является самым высокооплачиваемым лицом в каждой организации:

    WITH "return_skdjrltdorgoffcrtrstkyempl"
AS
(
    SELECT 
        *,
        ROW_NUMBER() OVER (PARTITION BY object_id ORDER BY bscmpnstntotal DESC) AS GroupRank
    FROM ctetable
)
UPDATE "return_skdjrltdorgoffcrtrstkyempl"
SET highestpaidflag2 = CASE WHEN GroupRank = 1 THEN 1 ELSE 0 END;

Я получаю ошибку:

ОШИБКА: отношение "ctetable" не существует

Структура таблицы: enter image description here

1 Ответ

0 голосов
/ 18 сентября 2018

Ух, какие имена.

Проблема в том, что вы назвали CTE так же, как таблица (я полагаю), и таблица «затеняет» CTE.Вы получаете сообщение об ошибке, потому что в таблице return_skdjrltdorgoffcrtrstkyempl нет столбца с именем grouprank.

. Вам нужно будет выбрать другое имя для CTE и объединить его с таблицей в UPDATE.утверждение (используя UPDATE ... FROM):

WITH shortname AS (...)
UPDATE ctetable
SET ...
FROM shortname
WHERE shortname.id = ctetable.id;

Однако мой совет будет , а не , чтобы сохранить эту информацию в базе данных.Разве информация не станет недействительной, если данные таблицы изменятся?Рассчитайте его по данным таблицы, когда вам это нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...