2016-12-14 1 views
0

Ich war mir nicht sicher, wie ich meine Frage formulieren sollte, da ich neu in SQL bin. Es sollte nicht zu schwer sein. Hier ist das Szenario.SQL-Statement-Gruppendaten aus mehreren Tabellen unter einem

Ich habe 3 Tabellen:

Kunden

id, 
contact 

subscribers_from_x

customer_id 
subscriber_name 

subscribers_from_y

customer_id, 
subscriber_name 

hier ist die Frage:

Nun, ich

customer.id

die Häufigkeit/Anzahl der customer.id auswählen möchten tritt in subscribers_from_x

Die Anzahl der Male/Anzahl der customer.id tritt in subscribers_from_y

aus diesen 3 Tabellen

ich GROUP_BY COUNT(*) versucht, aber herauszufinden, es nicht aus. THanks

Antwort

1

ich bei der Verwendung von zwei separaten Unterabfragen, welches Aggregat zählt durch die Teilnehmer für die x- und y-Tabellen gehen könnte:

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 
+0

Ich werde diese prüfen und erhalten zurück zu dir danke – tsaebeht

+0

Wird akzeptiert, wenn funktioniert – tsaebeht

+0

@Tim Biegeleisen, Unterabfrage kann zu Leistungsproblem richtig führen ?, bevorzuge ich normalerweise Join über Unterabfrage. Bitte lassen Sie es mich wissen, damit ich mich in die richtige Richtung bewege. –

1
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 

Es Ihnen gibt erforderliche Ausgabe

+1

Diese Methode kann zu Doppelzählungen führen, wenn ein bestimmter Kunde mehrmals in jeder der x- und y-Tabellen erscheint. –

+0

yeah, das ist, warum verwendet 'Gruppe von customers.id, subscribers_from_x.pk_col' –

+0

Wenn Sie dies in einem einzigen Join ohne Unterabfrage tun möchten, müssen Sie einen Weg um das Problem der doppelten Zählung finden. Ich stimme zu, dass Unterabfragen nicht optimal sind, aber es gibt eine Zeit und einen Ort für sie. Dies ist wahrscheinlich eine solche Zeit und ein solcher Ort. –