Postgresql ошибка: столбец должен присутствовать в предложении GROUP BY или использоваться в агрегатной функции - PullRequest
1 голос
/ 14 июля 2020

Таблица сообщений, откуда я хочу получить последние контакты для 'user1', теперь таблица выглядит так:

| id | receiver | sender | time       |
|----|----------|--------|------------|
| 1  | user1    | host1  | 2020-07-02 |
| 2  | host2    | user1  | 2020-07-03 |
| 3  | user3    | host3  | 2020-07-04 |

Мне удалось получить ожидаемый результат, используя mysql:

SELECT CASE WHEN receiver = 'user1' THEN sender ELSE receiver END AS id, max(time) AS time 
FROM message WHERE receiver = 'user1' OR sender = 'user1' 
GROUP BY CASE WHEN receiver = 'user1' THEN sender ELSE receiver END;

Но когда я запускаю этот запрос на postgres, я получаю сообщение об ошибке: Postgresql error: получатель столбца должен появиться в предложении GROUP BY или использоваться в агрегатной функции. Любое решение для решения этой проблемы?

1 Ответ

1 голос
/ 14 июля 2020

Я бы посоветовал distinct on:

select distinct on ( case when receiver = 'user1' then sender else receiver end ) m.*
from messages m
where 'user1' in (receiver, sender)
order by (case when receiver = 'user1' then sender else receiver end), time desc;
...