Badge for posts with Likes from a specific group

Мне кажется, я был уже близко. :upside_down_face: Отличная работа. :clap:

Я пытаюсь понять, эффективнее ли использовать CTE, но это сводит меня с ума :melting_face:


WITH staff_liked AS (

       SELECT COUNT(*), pa.post_id
       FROM post_actions pa 
       JOIN group_users gu ON gu.user_id = pa.user_id
       WHERE post_action_type_id = 2
       AND gu.group_id = 3 
       AND deleted_at IS NULL
       GROUP BY pa.post_id
       HAVING COUNT(*) >= 5

)

SELECT p.user_id, MAX(p.created_at) AS granted_at
FROM badge_posts p 
WHERE p.id IN (SELECT post_id FROM staff_liked)
   AND p.user_id >= 0
GROUP BY p.user_id
HAVING COUNT(*) >= 10

Хм. Это значит, что, например, нашу закрытую категорию TL0 он не учтёт?

Да, представление badge_post предварительно фильтрует некоторые данные для упрощения запросов. Вы можете изменить его так, чтобы оно использовало таблицу posts, что позволит включить все категории, но, возможно, потребуется добавить одну-две строки для исключения удалённых постов, удалённых тем и т. д. (хотя это может быть не обязательно, если вы хотите сохранить простоту и оставить бейж у пользователей даже после удаления их постов).