Usuarios publican por dominio de correo electrónico en los últimos 7 días

Consulta para contar publicaciones por dominio de correo electrónico en los últimos 7 días, excluyendo grupos automáticos (bots, sistema)

SELECT
  split_part(ue.email, '@', 2) AS email_domain, -- Extrae la parte del dominio del correo electrónico
  COUNT(p.id) AS post_count
FROM
  posts p
  JOIN users u ON p.user_id = u.id
  JOIN user_emails ue ON u.id = ue.user_id
    AND ue.primary = TRUE -- Asegura que estamos usando el correo electrónico principal
  LEFT JOIN group_users gu ON gu.user_id = u.id
  LEFT JOIN GROUPS g ON gu.group_id = g.id
    AND g.automatic = TRUE
WHERE
  p.created_at >= CURRENT_DATE - INTERVAL '7 days' -- Filtra las publicaciones de los últimos 7 días
  AND g.id IS NULL -- Asegura que los usuarios no formen parte de ningún grupo automático
GROUP BY
  email_domain
ORDER BY
  post_count DESC -- Ordena los resultados por el recuento de publicaciones en orden descendente
2 Me gusta

Esto no parece correcto. ¿Cuál es la intención?

¿Contar las publicaciones de la última semana, agrupadas por dominio de correo electrónico, pero excluyendo a los usuarios del sistema?

¿Necesita contar las publicaciones eliminadas o las publicaciones de temas eliminados, excluir las publicaciones de acciones pequeñas o las que se encuentran en mensajes privados?

Esta fue una prueba rápida y sucia del bot SQL Helper para encontrar el recuento de publicaciones por dominio. El caso de uso podría ser para asociaciones o foros de membresía que desean rastrear qué subgrupos dentro del foro están más comprometidos.

Ciertamente podría refinarse, como eliminar publicaciones eliminadas o de acciones pequeñas, PM, etc., pero pensé en publicarlo en caso de que alguien pudiera inspirarse en él.

Creo que en realidad da números inflados debido a las uniones de grupos (además, todos forman parte de un grupo automático por su nivel de confianza, por lo que hay una pequeña inconsistencia allí). Creo que podemos eliminar eso y tal vez hacer un par de ajustes para centrarnos en temas, publicaciones y mensajes privados.

Déjame intentarlo.


Quizás algo como esto:

-- [params]
-- string :interval = 7 days


SELECT
  split_part(ue.email, '@', 2) AS email_domain, -- Extrae la parte del dominio del correo electrónico
  COUNT(p.id) AS "Total Posts",
  COUNT(p.id) FILTER (WHERE p.post_number = 1 AND t.archetype = 'regular') AS "Topics",
  COUNT(p.id) FILTER (WHERE p.post_number > 1 AND t.archetype = 'regular') AS "Posts",
  COUNT(p.id) FILTER (WHERE t.archetype = 'private_message') AS "Personal Message posts"
FROM posts p
  JOIN user_emails ue ON p.user_id = ue.user_id AND ue.primary = TRUE -- Asegura que estamos usando el correo electrónico principal
  JOIN topics t ON t.id = p.topic_id
WHERE p.created_at >= CURRENT_DATE - INTERVAL :interval -- Filtra las publicaciones de los últimos x tiempo según el parámetro
  AND p.user_id > 0 -- Excluye usuarios del sistema (sistema y bots)
  AND p.deleted_at ISNULL
  AND t.deleted_at ISNULL
  AND p.post_type <> 3
GROUP BY email_domain
ORDER BY "Total Posts" DESC -- Ordena los resultados por el recuento de publicaciones en orden descendente
2 Me gusta

2 publicaciones se dividieron en un nuevo tema: Estadísticas de usuario más correo electrónico

Este tema se cerró automáticamente 30 días después de la última respuesta. Ya no se permiten nuevas respuestas.