Итак, у меня есть следующая таблица
product_id sender_id timestamp ...other columns...
1 2 1222
1 2 3423
1 2 1231
2 2 890
3 4 234
2 3 234234
Я хочу получить строки, где sender_id = 2, но я хочу посчитать и сгруппировать по product_id и отсортировать по убыванию отметки времени. Это означает, что мне нужен следующий результат
product_id sender_id timestamp count ...other columns...
1 2 3423 3
2 2 890 1
Я попробовал следующий запрос:
SELECT product_id, sender_id, timestamp, count(product_id), ...other columns...
FROM table
WHERE sender_id = 2
GROUP BY product_id
Но я получаю следующую ошибку Error in query: ERROR: column "table.sender_id" must appear in the GROUP BY clause or be used in an aggregate function
Похоже, я не могу выбрать столбцы, которых нет в GROUP BY. Другой метод, который я нашел в Интернете, состоял в том, чтобы присоединиться к
SELECT product_id, sender_id, timestamp, count, ...other columns...
FROM table
JOIN (
SELECT product_id, COUNT(product_id) AS count
FROM table
GROUP BY (product_id)
) table1 ON table.product_id = table1.product_id
WHERE sender_id = 2
GROUP BY product_id
Но при этом просто перечисляются все строки без группировки или подсчета. Я предполагаю, что часть ON просто расширяет таблицу снова.