sql >> Base de Datos >  >> RDS >> PostgreSQL

Rails todos los usuarios en un grupo con género masculino

Creo que puede obtener todas esas identificaciones de grupo de los grupos de usuarios donde el género del usuario es female y usarlos con un NOT IN cláusula, para filtrar todos los grupos que coincidan con esos ID:

with users(id, gender) as (values (1, 'male'), (2, 'female')),
     groups(id, name) as (values (1, '1st'), (2, '2nd')),
     user_groups(id, user_id, group_id) as (values (1, 1, 1), (2, 2, 1), (3, 2, 1))
select *
from groups g
where g.id not in (
    select ug.group_id
    from user_groups ug
    inner join users u on u.id = ug.user_id
    where u.gender = 'female'
)

La versión de ActiveRecord podría verse así:

Group.where.not(
  id: UserGroup.joins(:user)
               .where(users: { gender: 'female' })
               .select(:group_id)
)