Usando FILTER para resumir dados

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 AS renomeia as colunas de saída para melhor legibilidade.
  • A consulta une a tabela user_options com a tabela users para acessar as configurações e os dados de atividade do usuário.
  • A condição WHERE uo.user_id > 0 filtra 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.

4 curtidas