Ошибка: column must appear in the group by clause or be used in an aggregate function postgresql. SQL
Возникла проблема с использованием GROUP BY в SQL. Использую БД PostgresSQL. В интернете нашел, что в ней надо перечислять все не агрегированные столбцы SELECT-а в GROUP BY. Но проблему в моем случае это не решает. Надо во вложенной выборке отобрать именно user на основе условия CASE WHEN, а затем сгруппировать по этому полю и посчитать максимальное значение поля sending_time для каждой группы. Сам текст запроса (с лишними полями в GROUP BY):
SELECT receiver_id_id, sender_id_id, time, text, number
FROM (
SELECT MAX(sending_time) as time,
CASE
WHEN sender_id_id = 7 THEN receiver_id_id
WHEN receiver_id_id = 7 THEN sender_id_id END AS user
FROM forum_message
WHERE (receiver_id_id = 7 OR sender_id_id = 7)
GROUP BY user, receiver_id_id, sender_id_id) AS T
JOIN forum_message ON T.time = forum_message.sending_time
ORDER BY T.time DESC;
Как я могу решить данную проблему? P.S. Исходная таблица:
sender_id_id | receiver_id_id | sending_time
--------------+----------------+-------------------------------
9 | 8 | 2020-04-06 23:56:49.755201+03
9 | 9 | 2020-04-06 23:57:47.028162+03
8 | 9 | 2020-04-06 23:59:42.259148+03
8 | 7 | 2020-04-07 00:00:22.941715+03
7 | 8 | 2020-04-09 00:06:40.965788+03
По запросу, указанному выше, получаю:
receiver_id_id | sender_id_id | time
----------------+--------------+-------------------------------
8 | 7 | 2020-04-09 00:06:40.965788+03
7 | 8 | 2020-04-07 00:00:22.941715+03
Т.е. изначальный смысл условия CASE WHEN, направленного на отбор последнего сообщения из переписки пользователей, пропадает. Видны два последних сообщениях: от данного пользователя пользователю с конкретным id, и наоборот. Т.е. хочу получить:
receiver_id_id | sender_id_id | time
----------------+--------------+-------------------------------
8 | 7 | 2020-04-09 00:06:40.965788+03