No estaba seguro de cómo formular mi pregunta porque soy nuevo en SQL. No debería ser demasiado difícil. Aquí está el escenario.

Tengo 3 mesas:

clientes

id, 
contact

subscribers_from_x

customer_id
 subscriber_name

subscribers_from_y

customer_id,
subscriber_name

Aquí está la pregunta:

Ahora, quiero seleccionar

customer.id

el número de veces / recuento de customer.id se produce en subscribers_from_x

el número de veces / recuento de customer.id se produce en subscribers_from_y

De estas 3 tablas

Probé GROUP_BY COUNT(*) pero no me di cuenta. Gracias

0
tsaebeht 14 dic. 2016 a las 10:50

2 respuestas

La mejor respuesta

Podría usar dos subconsultas separadas que agregan recuentos por suscriptor para las tablas xey:

SELECT t1.id,
       t1.contact,
       COALESCE(t2.x_count, 0) AS subscribers_from_x,
       COALESCE(t3.y_count, 0) AS subscribers_from_y
FROM customers t1
LEFT JOIN
(
    SELECT customer_id, COUNT(*) AS x_count
    FROM subscribers_from_x
    GROUP BY customer_id
) t2
    ON t1.id = t2.customer_id
LEFT JOIN
(
    SELECT customer_id, COUNT(*) AS y_count
    FROM subscribers_from_y
    GROUP BY customer_id
) t3
    ON t1.id = t3.customer_id
1
Tim Biegeleisen 14 dic. 2016 a las 07:53
SELECT DISTINCT(users.id),count(x.customer_id) 'X count',count(y.customer_id) 'Y Count'
       FROM customers 
          LEFT  JOIN subscribers_from_x x ON customers.id = x.customer_id
          LEFT  JOIN subscribers_from_y y ON customers.id = y.customerid
        GROUP BY customers.id,subscribers_from_x.pk_col -- primary key col of subscribers_from_x

Le dará la salida requerida

1
kapil.dev 14 dic. 2016 a las 08:26