Estoy intentando filtrar un grupo que creé llamado “Employees” en esta pestaña del explorador de datos. ¿Qué estoy haciendo mal? ¿Cómo puedo excluir el grupo que he creado?:
SELECT
sum(p.score) / count(p) as "average score per post",
count(p.id) as post_count,
p.user_id
FROM posts p
JOIN users u ON u.id = p.user_id
WHERE p.created_at >= CURRENT_DATE - INTERVAL '6 month'
AND NOT u.admin
AND NOT u.employees
AND u.active
GROUP by user_id, u.views
HAVING count(p.id) > 10
ORDER BY sum(p.score) / count(p) DESC
LIMIT 20
La tabla users tiene primary_group_id (entero), por lo que podrías usarla en tu consulta si “Empleados” está establecido como grupo principal para estos usuarios. De lo contrario, creo que tendrías que hacer una unión separada con la tabla groups. (Nota: no recuerdo los detalles de la estructura de las tablas de memoria, pero la pequeña función de búsqueda a la derecha al editar una consulta de Data Explorer es muy útil para esto).
Para obtener una lista de usuarios que excluya a los miembros de un grupo, podrías probar algo como esto. Esto excluirá a los miembros del grupo ‘employees’. Debería ser posible reestructurar tu consulta para usar esto.
WITH group_users AS (
SELECT user_id
FROM group_users gu
JOIN groups g
ON g.id = gu.group_id
WHERE g.name = 'employees'
)
SELECT
u.id AS user_id
FROM users u
WHERE u.id NOT IN (SELECT * FROM group_users)
ORDER BY user_id