SQL-запрос для возврата суммы элементов по пользователю и дате - PullRequest
0 голосов
/ 01 октября 2019

У меня есть 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

1 Ответ

0 голосов
/ 01 октября 2019
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 + '
    AND acts.created_at >= (CURRENT_DATE - 7)
GROUP BY acts.users_id, username, avatar_url
ORDER BY COUNT(acts.id) DESC

Вам не нужно группировать по полю или выбирать поле для фильтрации по этому полю. Просто добавьте условие и больше ничего не меняйте.

Это то, что имел в виду @forpas, я думаю.

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