Visão Geral
Neste relatório, exploraremos uma consulta SQL que usa a função FILTER para segmentar dados de usuários com base em suas preferências de resumo de atividades. A função FILTER é uma ferramenta poderosa em SQL que permite agregação condicional dentro de uma única consulta, fornecendo uma maneira de aplicar funções de agregação como COUNT(), SUM(), AVG(), etc., a um subconjunto de dados.
A Consulta SQL Explicada
A consulta SQL fornecida conta o número de usuários com diferentes configurações de resumo de atividades. Aqui está uma análise de cada parte da consulta:
SELECT
COUNT(*) FILTER (WHERE uo.email_digests = false) AS "Desativado",
COUNT(*) FILTER (WHERE uo.email_digests = true) AS "Total Ativado",
COUNT(*) FILTER (WHERE uo.email_digests = true AND u.last_seen_at > CURRENT_DATE - INTERVAL '180 DAYS') AS "Ignorado",
COUNT(*) FILTER (WHERE uo.email_digests = true AND uo.digest_after_minutes = 30) AS "Meia Hora",
COUNT(*) FILTER (WHERE uo.email_digests = true AND uo.digest_after_minutes = 60 ) AS "Hora",
COUNT(*) FILTER (WHERE uo.email_digests = true AND uo.digest_after_minutes = 1440) AS "Diário",
COUNT(*) FILTER (WHERE uo.email_digests = true AND uo.digest_after_minutes = 10080) AS "Semanal",
COUNT(*) FILTER (WHERE uo.email_digests = true AND uo.digest_after_minutes = 43200) AS "Mensal",
COUNT(*) FILTER (WHERE uo.email_digests = true AND uo.digest_after_minutes = 259200) AS "6 Meses"
FROM user_options uo
JOIN users u ON u.id = uo.user_id
WHERE uo.user_id > 0
COUNT(*) FILTER (WHERE condition)conta o número de linhas que correspondem à condição especificada.- A cláusula
ASrenomeia as colunas de saída para melhor legibilidade. - A consulta une a tabela
user_optionscom a tabelauserspara acessar as configurações e os dados de atividade do usuário. - A condição
WHERE uo.user_id > 0filtra quaisquer usuários do sistema ou entradas não padrão.
Como a Função FILTER Funciona
A função FILTER é usada em conjunto com uma função de agregação para contar apenas as linhas que atendem a critérios específicos. É uma alternativa mais legível e muitas vezes mais eficiente ao uso de subconsultas ou instruções CASE para agregação condicional.
Aqui está a sintaxe geral para usar FILTER:
AGGREGATE_FUNCTION(column_name) FILTER (WHERE condition) AS alias_name
Quando Usar a Função FILTER
A função FILTER é particularmente útil quando você precisa realizar várias contagens (ou outras agregações) com condições diferentes em uma única consulta. Ela simplifica a consulta e evita a necessidade de várias subconsultas ou instruções CASE complexas.
Você pode usar a função FILTER para segmentar usuários por suas preferências, posts por suas Reações ou tópicos por suas categorias, entre outros casos de uso. É uma ferramenta versátil que pode aprimorar relatórios e análises de dados.
Conclusão
A função FILTER é uma adição valiosa a qualquer kit de ferramentas SQL. Ela permite agregação condicional clara e concisa, tornando as consultas de dados complexas mais gerenciáveis e compreensíveis.