Tengo una consulta relacionada con la obtención de todos los datos de la tabla 1 con el número total de usuarios referidos de cada registro / usuario.

Tengo una tabla llamada table1 .

Tabla: tabla1

id    name      code    refer_from_code
1     Name1     R1      0
2     Name2     R2      R4
3     Name3     R3      R2
4     Name4     R4      R4
5     Name5     R5      R2
6     Name6     R6      R1
7     Name7     R7      R6

Código es el código asignado a ese usuario durante el registro. refer_from_code significa desde qué usuario se registró esa persona. 0 significa no registrarse en nombre de otra persona.

Pregunta:

Quiero extraer todos los registros de table1 pero también obtener el número total de referencias contra cada usuario con respecto a refer_from_code.

Resultados deseados:

id    name      total_referred
1     Name1     1
2     Name2     2
3     Name3     0
4     Name4     2
5     Name5     0
6     Name6     1
7     Name7     0

Lo que he hecho ahora:

He escrito la siguiente consulta para realizar esta tarea, pero no funciona como debería.

SELECT table1.id, table1.name, table1.COUNT(*) AS total_referred 
FROM table1 
JOIN table1 ON (table1.code=table1.refer_from_code);

Quiero hacer esto usando una sola consulta MySQL.

0
John Doe 29 ago. 2020 a las 04:09

1 respuesta

La mejor respuesta

Creo que debería poder utilizar GROUP BY y LEFT JOIN aquí.

SELECT
    u.name,
    IFNULL(referrals.total_referred, 0) total_referrals
FROM users u
LEFT JOIN (
    SELECT
        ui.refer_from_code,
        COUNT(*) AS total_referred
    FROM users ui
    GROUP BY ui.refer_from_code
) AS referrals ON referrals.refer_from_code = u.code
ORDER BY total_referrals DESC

Violín

0
dillon 29 ago. 2020 a las 01:37