В express API я использую необработанный запрос на postgres дБ. У меня есть модель Актов, и я создал таблицу лидеров, которая ранжирует пользователей (членов группы) по количеству действий, которые они зарегистрировали в течение нескольких дней (: points_horizon). вот этот запрос:
SELECT memberships.users_id
,users.username
,avatar_url
,COUNT(acts.users_id)
FROM memberships
JOIN groups ON memberships.groups_id = groups.id
JOIN users ON memberships.users_id = users.id
LEFT JOIN acts ON acts.users_id = users.id
AND acts.created_at >= (CURRENT_DATE - 1 - '+ JSON.parse(req.query.group).points_horizon + ')
WHERE memberships.groups_id = ' + req.params.group_id + '
GROUP BY memberships.users_id
,users.username
,avatar_url
ORDER BY COUNT(acts.id) DESC;
Однако я пытаюсь создать счет, в котором действия имеют разные значения в атрибуте с именем deed_points
. это то, что я пробовал до сих пор:
SELECT memberships.users_id
,users.username
,avatar_url
,SUM(acts.deed_points)
FROM memberships
JOIN groups ON memberships.groups_id = groups.id
JOIN users ON memberships.users_id = users.id
LEFT JOIN acts ON acts.users_id = users.id
AND acts.created_at >= (CURRENT_DATE - 1 - '+ JSON.parse(req.query.group).points_horizon + ')
WHERE memberships.groups_id = ' + req.params.group_id + '
GROUP BY memberships.users_id
,users.username
,avatar_url
ORDER BY SUM(acts.deed_points) DESC;
Это возвращает нулевые значения вместо суммы deed_points.
в ответ на комментарий, вот мои схемы таблиц:
пользователи:
группы:
членство:
действует:
Акты:
В настоящее время есть только один запись в деяниях db, у которой deeds_id = 1 и deed_points = 10