Usando FILTER para resumir datos

Resumen

En este informe, exploraremos una consulta SQL que utiliza la función FILTER para segmentar los datos de los usuarios en función de sus preferencias de resumen de actividad. La función FILTER es una herramienta potente en SQL que permite la agregación condicional dentro de una sola consulta, proporcionando una forma de aplicar funciones de agregación como COUNT(), SUM(), AVG(), etc., a un subconjunto de datos.

La consulta SQL explicada

La consulta SQL proporcionada cuenta el número de usuarios con diferentes configuraciones de resumen de actividad. Aquí hay un desglose de cada parte de la consulta:

SELECT 
    COUNT(*) FILTER (WHERE uo.email_digests = false) AS "Disabled",
    COUNT(*) FILTER (WHERE uo.email_digests = true) AS "Total Enabled",
    COUNT(*) FILTER (WHERE uo.email_digests = true AND u.last_seen_at > CURRENT_DATE - INTERVAL '180 DAYS') AS "Skipped",
    COUNT(*) FILTER (WHERE uo.email_digests = true AND uo.digest_after_minutes = 30) AS "Half Hourly",
    COUNT(*) FILTER (WHERE uo.email_digests = true AND uo.digest_after_minutes = 60 ) AS "Hourly",
    COUNT(*) FILTER (WHERE uo.email_digests = true AND uo.digest_after_minutes = 1440) AS "Daily",
    COUNT(*) FILTER (WHERE uo.email_digests = true AND uo.digest_after_minutes = 10080) AS "Weekly",
    COUNT(*) FILTER (WHERE uo.email_digests = true AND uo.digest_after_minutes = 43200) AS "Monthly",
    COUNT(*) FILTER (WHERE uo.email_digests = true AND uo.digest_after_minutes = 259200) AS "6 Monthly"
FROM user_options uo
  JOIN users u ON u.id = uo.user_id
WHERE uo.user_id > 0
  • COUNT(*) FILTER (WHERE condition) cuenta el número de filas que coinciden con la condición especificada.
  • La cláusula AS renombra las columnas de salida para una mejor legibilidad.
  • La consulta une la tabla user_options con la tabla users para acceder a la configuración y los datos de actividad del usuario.
  • La condición WHERE uo.user_id > 0 filtra cualquier usuario del sistema o entrada no estándar.

Cómo funciona la función FILTER

La función FILTER se utiliza junto con una función de agregación para contar solo las filas que cumplen criterios específicos. Es una alternativa más legible y, a menudo, más eficiente que usar subconsultas o sentencias CASE para la agregación condicional.

Aquí está la sintaxis general para usar FILTER:

AGGREGATE_FUNCTION(column_name) FILTER (WHERE condition) AS alias_name

Cuándo usar la función FILTER

La función FILTER es particularmente útil cuando necesita realizar múltiples recuentos (u otras agregaciones) con diferentes condiciones en una sola consulta. Simplifica la consulta y evita la necesidad de múltiples subconsultas o complejas sentencias CASE.

Podría usar la función FILTER para segmentar usuarios por sus preferencias, publicaciones por sus Reacciones o temas por sus categorías, entre otros casos de uso. Es una herramienta versátil que puede mejorar la generación de informes y el análisis de datos.

Conclusión

La función FILTER es una valiosa adición a cualquier conjunto de herramientas SQL. Permite una agregación condicional clara y concisa, haciendo que las consultas de datos complejas sean más manejables y comprensibles.

4 Me gusta