Estou usando o Postgres 9.4 e tenho uma consulta parecida com a seguinte:
SELECT attendees.event_id, attendees.user_id, users.tags
FROM users, attendees
WHERE 'crystal:promo' = ANY(users.tags)
AND users.id = attendees.user_id
AND attendees.status = 'paid'
GROUP BY attendees.event_id, attendees.user_id, users.tags
ORDER BY attendees.event_id desc;
Resultado:
event_id | user_id | tags
----------+---------+------
1 | 2 | ...
1 | 4 | ...
1 | 7 | ...
Gostaria de adicionar uma coluna de resumo para cada linha que é o número total de pessoas por evento independente das tags do usuário, de modo que o resultado seja algo como:
select count(*) from attendees where status='paid' group by event_id
e juntou com os resultados acima (assumindo 11 pagos):
event_id | user_id | tags | total_event_paid
----------+---------+------+------------------
1 | 2 | ... | 11
1 | 4 | ... | 11
1 | 7 | ... | 11
Você pode simplesmente substituir
attendees
por uma subconsulta que pré-seleciona linhas "pagas" e adicionar a contagem sem agregar - com uma função de janela :DISTINCT
(ouGROUP BY
) no exteriorSELECT
pode ou não ser necessário.Relacionado:
Começando com 9.4 , você pode usar a função de janela com
FILTER
. Algo como: