Hola @Firepup650
quizás prueba con este. funcionó en mi instancia.
<NOMBRE DE CATEGORÍA> = Nombre de categoría sensible a mayúsculas y minúsculas (no slug)
<GRUPO> = Nombre del grupo (ej: Staff, Trust_level_0)
<NÚMERO MÍNIMO DE ME GUSTA> = número mínimo de me gusta que deseas establecer
<UMBRAL DE NÚMERO DE PUBLICACIONES> = número mínimo de publicaciones
SELECT p.user_id, min(p.created_at) granted_at, MIN(p.id) post_id
FROM badge_posts p
JOIN topics t ON t.id = p.topic_id
WHERE t.category_id = (
SELECT id FROM categories WHERE name ilike '<NOMBRE DE CATEGORÍA>'
) AND (
SELECT count(*)
FROM post_actions pa
WHERE pa.post_id = p.id
AND post_action_type_id = (
SELECT id FROM post_action_types WHERE name_key = 'like'
) AND pa.user_id IN (
SELECT gu.user_id
FROM group_users gu
WHERE gu.group_id = ( SELECT id FROM groups WHERE name ilike '<NOMBRE DE GRUPO>' )
)
) >= <NÚMERO MÍNIMO DE ME GUSTA>
AND p.user_id >= 0
GROUP BY p.user_id
HAVING count(*) >= <UMBRAL DE NÚMERO DE PUBLICACIONES>
para múltiples categorías puedes hacer esto:
<NOMBRES DE CATEGORÍAS> = Nombres de categorías sensibles a mayúsculas y minúsculas
<GRUPO> = Nombre del grupo (ej: Staff, Trust_level_0)
<NÚMERO MÍNIMO DE ME GUSTA> = número mínimo de me gusta que deseas establecer
<UMBRAL DE NÚMERO DE PUBLICACIONES> = número mínimo de publicaciones
SELECT p.user_id, min(p.created_at) granted_at, MIN(p.id) post_id
FROM badge_posts p
JOIN topics t ON t.id = p.topic_id
WHERE t.category_id IN (
SELECT id FROM categories WHERE name ILIKE ANY (ARRAY['<NOMBRE DE CATEGORÍA 1>', '< NOMBRE DE CATEGORÍA 2>', '< NOMBRE DE CATEGORÍA 3>'])
) AND (
SELECT count(*)
FROM post_actions pa
WHERE pa.post_id = p.id
AND post_action_type_id = (
SELECT id FROM post_action_types WHERE name_key = 'like'
) AND pa.user_id IN (
SELECT gu.user_id
FROM group_users gu
WHERE gu.group_id = ( SELECT id FROM groups WHERE name ILIKE '<GRUPO>' )
)
) >= <NÚMERO MÍNIMO DE ME GUSTA>
AND p.user_id >= 0
GROUP BY p.user_id
HAVING count(*) >= <UMBRAL DE NÚMERO DE PUBLICACIONES>