У меня есть Express Api, использующий postgresql.
В настоящее время я использую следующий запрос для заполнения списка лидеров:
SELECT acts.users_id, username, avatar_url, COUNT(acts.id)
FROM acts
RIGHT JOIN users ON acts.users_id = users.id
JOIN memberships on memberships.users_id = users.id
WHERE memberships.groups_id = ' + req.params.group_id + '
GROUP BY acts.users_id, username, avatar_url
ORDER BY COUNT(acts.id) DESC
Возвращает список пользователей, принадлежащих к определенной группе. перечислены в порядке убывания количества «действий» каждого пользователя.
Я пытаюсь изменить этот запрос, чтобы включить только действия, которые были созданы в течение последних, например, 7 дней.
У меня естьпробовал этот модифицированный запрос:
SELECT acts.users_id, acts.created_at, username, avatar_url, COUNT(acts.id)
FROM acts
RIGHT JOIN users ON acts.users_id = users.id
JOIN memberships on memberships.users_id = users.id
WHERE memberships.groups_id = ' + req.params.group_id + '
AND acts.created_at >= (CURRENT_DATE - 7)
GROUP BY acts.users_id, acts.created_at, username, avatar_url
ORDER BY COUNT(acts.id) DESC
этот модифицированный запрос возвращает правильные данные, но он разделяется по дате, поэтому я получаю несколько строк для каждого пользователя вместо итогов по каждому пользователю. Я предполагаю, что это связано с включением create_at в group_by. Однако, если я удаляю его, я получаю сообщение об ошибке:
error: column "acts.created_at" must appear in the GROUP BY clause or be used in an aggregate function