A cláusula `FILTER` no PostgreSQL é utilizada para aplicar condições às funções de agregação, permitindo um controle mais granular sobre quais linhas são incluídas na agregação. É particularmente útil para executar a agregação condicional diretamente na chamada da função de agregação.
Uso
A cláusula `FILTER` é utilizada com funções de agregação para especificar uma condição que determina quais linhas serão incluídas no cálculo. Ela é escrita imediatamente após a função de agregação, entre parênteses.
Nessa sintaxe, `FILTER (WHERE condition)` garante que somente as linhas que atendem à condição especificada sejam consideradas pela função de agregação. As funções de agregação comuns usadas com `FILTER` incluem `SUM`, `COUNT`, `AVG`, `MIN` e `MAX`. Além disso, a cláusula `FILTER` pode ser combinada com funções de janela para consultas analíticas.
Exemplos
1. Uso básico com COUNT
sql
SELECTCOUNT(*)FILTER(WHERE status ='active')AS active_count
FROM users;Tecnologia
Este exemplo conta apenas as tabelas da tabela `users` em que o `status` é 'active'.
2. Usando FILTER com SUM
sql
SELECTSUM(salary)FILTER(WHERE department ='IT')AS total_it_salary
FROM employees;Tecnologia
Aqui, a função `SUM` calcula o total de salários somente para os funcionários do departamento de "TI".
3. Combinação de vários agregados
sql
SELECTCOUNT(*)AS total_orders,COUNT(order_id)FILTER(WHERE status ='completed')AS completed_orders,AVG(amount)FILTER(WHERE status ='completed')AS average_completed_amount
FROM orders;Tecnologia
Este exemplo calcula o número total de pedidos, o número de pedidos concluídos e a quantidade média de pedidos concluídos, tudo em uma única consulta.
Dicas e práticas recomendadas
Use para lógica condicional. Use o `FILTER` para aplicar condições diretamente às funções de agregação, simplificando consultas complexas.
Melhore a legibilidade. Ao usar o `FILTER`, você pode evitar subconsultas aninhadas e manter uma estrutura de consulta mais limpa.
Combinar com GROUP BY. O `FILTER` pode ser efetivamente combinado com o `GROUP BY` para agregações condicionais agrupadas. Por exemplo:
sql
SELECT department,COUNT(employee_id)FILTER(WHERE status ='active')AS active_employees
FROM employees
GROUPBY department;Tecnologia
Condições de teste separadamente. Certifique-se de que a lógica em sua cláusula `FILTER` esteja correta, testando as condições independentemente quando possível.
Observe o desempenho em grandes conjuntos de dados. Embora o `FILTER` possa simplificar as consultas, garanta que o desempenho seja ideal, especialmente com grandes conjuntos de dados e condições complexas.
Conformidade com o padrão SQL. A cláusula `FILTER` faz parte do padrão SQL, oferecendo benefícios de compatibilidade para consultas entre bancos de dados.
Erros e armadilhas comuns
Mal-entendido da lógica de condições: Certifique-se de que a condição na cláusula `FILTER` esteja corretamente especificada para evitar resultados inesperados.
Considerações sobre o desempenho: Esteja atento ao possível impacto no desempenho de grandes conjuntos de dados e otimize-os quando necessário.
Comparação entre FILTER e CASE
A cláusula `FILTER` é diferente do uso de instruções `CASE` em funções agregadas. Enquanto o `FILTER` fornece uma sintaxe mais concisa e legível para a agregação condicional, o `CASE` oferece flexibilidade para uma lógica mais complexa. Escolha `FILTER` para condições mais simples e `CASE` quando for necessária uma lógica mais detalhada.
A cláusula `FILTER` no PostgreSQL é utilizada para aplicar condições às funções de agregação, permitindo um controle mais granular sobre quais linhas são incluídas na agregação. É particularmente útil para executar a agregação condicional diretamente na chamada da função de agregação.
Uso
A cláusula `FILTER` é utilizada com funções de agregação para especificar uma condição que determina quais linhas serão incluídas no cálculo. Ela é escrita imediatamente após a função de agregação, entre parênteses.
Nessa sintaxe, `FILTER (WHERE condition)` garante que somente as linhas que atendem à condição especificada sejam consideradas pela função de agregação. As funções de agregação comuns usadas com `FILTER` incluem `SUM`, `COUNT`, `AVG`, `MIN` e `MAX`. Além disso, a cláusula `FILTER` pode ser combinada com funções de janela para consultas analíticas.
Exemplos
1. Uso básico com COUNT
Este exemplo conta apenas as tabelas da tabela `users` em que o `status` é 'active'.
2. Usando FILTER com SUM
Aqui, a função `SUM` calcula o total de salários somente para os funcionários do departamento de "TI".
3. Combinação de vários agregados
Este exemplo calcula o número total de pedidos, o número de pedidos concluídos e a quantidade média de pedidos concluídos, tudo em uma única consulta.
Dicas e práticas recomendadas
Erros e armadilhas comuns
Comparação entre FILTER e CASE
A cláusula `FILTER` é diferente do uso de instruções `CASE` em funções agregadas. Enquanto o `FILTER` fornece uma sintaxe mais concisa e legível para a agregação condicional, o `CASE` oferece flexibilidade para uma lógica mais complexa. Escolha `FILTER` para condições mais simples e `CASE` quando for necessária uma lógica mais detalhada.