es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Realizar una consulta SELECT con una subconsulta para CONTAR el total de suscriptores de un suscriptor.

Estoy tratando de crear una consulta que cuente el total de suscriptores de un suscriptor. Actualmente se ve así:

await this.queryInstance.query(
'SELECT all_users_subbed_to.* , (SELECT COUNT(??????)) AS subscribers_sub_count
FROM 
 (SELECT publisher_id, subscriber_id, u2.username 
 AS username, u2.user_photo AS user_photo 
 FROM subscribers s 
 INNER JOIN users u 
 ON (u.id = s.subscriber_id) 
 INNER JOIN users u2 ON (u2.id = s.publisher_id) 
 WHERE subscriber_id = ($1) 
 LIMIT 20 
 OFFSET ($2)) 
AS all_users_subbed_to;',
 [currentUserId = 80, offset]
 );

La CLÁUSULA FROM, también conocida como all_users_subbed_to, está funcionando correctamente y muestra todos los suscriptores que tiene el usuario actual. Los datos se devuelven de la siguiente manera:

"subscribedToCurrentUser": [
        {
            "publisher_id": 84,
            "subscriber_id": 80,
            "username": "supercoookie",
            "user_photo": "profile-pic-for-supercoookie.jpeg"
        },
        {
            "publisher_id": 88,
            "subscriber_id": 80,
            "username": "GERPAL1",
            "user_photo": "profile-pic-for-GERPAL1.jpeg"
        }
    ]

El problema que tengo es obtener el recuento total de suscriptores para la lista de esos suscriptores. Necesito usar el publisher_id de all_users_subbed_to y obtener sus suscripciones totales (usando COUNT) de la tabla de suscriptores. Me gustaría crear una nueva columna llamada subscribers_sub_count que contenga ese total.
¿Algún idea?
Debería verse así:

"subscribedToCurrentUser": [
        {
            "publisher_id": 84,
            "subscriber_id": 80,
            "username": "supercoookie",
            "user_photo": "profile-pic-for-supercoookie.jpeg",
            "subscribers_sub_count": 3
        },
        {
            "publisher_id": 88,
            "subscriber_id": 80,
            "username": "GERPAL1",
            "user_photo": "profile-pic-for-GERPAL1.jpeg",
            "subscribers_sub_count": 70
        }
    ]

La tabla de suscriptores se ve así: Imagen de la tabla de suscriptores

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para obtener el recuento total de suscriptores para cada publisher_id en la lista “subscribedToCurrentUser”, podemos modificar la consulta original para incluir una subconsulta que cuente el número de suscriptores para cada publisher_id en la tabla “subscribers”.

    Así es cómo podemos modificar la consulta:

    await this.queryInstance.query(
      'SELECT all_users_subbed_to.*, sub_counts.subscriber_count AS subscribers_sub_count
       FROM 
         (SELECT publisher_id, subscriber_id, u2.username AS username, u2.user_photo AS user_photo 
          FROM subscribers s 
          INNER JOIN users u ON (u.id = s.subscriber_id) 
          INNER JOIN users u2 ON (u2.id = s.publisher_id) 
          WHERE subscriber_id = ($1) 
          LIMIT 20 
          OFFSET ($2)) AS all_users_subbed_to
       LEFT JOIN
         (SELECT publisher_id, COUNT(*) as subscriber_count
          FROM subscribers
          GROUP BY publisher_id) AS sub_counts
       ON all_users_subbed_to.publisher_id = sub_counts.publisher_id;'
      ,
      [currentUserId = 80, offset]
    );
    

    En esta consulta modificada, hemos agregado un LEFT JOIN a una subconsulta que cuenta el número de suscriptores para cada publisher_id. La subconsulta agrupa a los suscriptores por publisher_id utilizando la cláusula GROUP BY y cuenta el número de suscriptores utilizando COUNT(*). La subconsulta se nombra como “sub_counts” y se une a la subconsulta “all_users_subbed_to” utilizando la cláusula ON para hacer coincidir los publisher_ids.

    El resultado de esta consulta debería ser una lista de registros “subscribedToCurrentUser” con un nuevo campo llamado “subscribers_sub_count” que contiene el número total de suscriptores para cada publisher_id en la lista.

Comments are closed.