2017-12-05 11 views
0

So habe ich diese Tabellen:SQL kombinieren zwei Auswahl über mehrere Tabellen

Tabelle 1:

facilities emails 
Fac 1  [email protected] 
Fac 2  [email protected] 
Fac 1 RE  [email protected] 

Tabelle 2:

facilities emails 
fac1  [email protected] 
fac2  [email protected] 

nun auf diesen beiden Tabellen, ich bin versuchen herauszufinden, wie viele Einrichtungen jede Adress-E-Mail verwenden. Ich habe zwei SQL-Abfragen, die nur tun, dass:

SELECT ce.email, count(*) 
AS TOTAL_FACILITIES 
FROM table1 
AS ce 
GROUP BY ce.email 
ORDER BY TOTAL_FACILITIES DESC 

SELECT ca.emails, count(*) 
AS TOTAL_FACILITIES 
FROM table2 
AS ca 
GROUP BY ca.emails 
ORDER BY TOTAL_FACILITIES DESC 

Das gibt mir die verschiedenen E-Mails von jedem Tisch und wie viele Einrichtungen sie nutzen. Ich versuche jetzt, es zu einem einzigen Anruf mit einem Join zu kombinieren, aber ich kann nicht herausfinden, wie man die Zählung funktioniert.

Irgendwelche Vorschläge?

Antwort

0

Ich glaube, Sie suchen nach etwas wie folgt aus:

SELECT A.emails, COUNT(*) as total_facilities 
FROM 
(SELECT * FROM table1 UNION ALL SELECT * FROM table2) A 
GROUP BY A.emails 
ORDER BY COUNT(*) DESC; 
+0

Das in der Tat es tut. Ich wollte gerade auf Eric's Antwort posten, die darauf hinwies, dass die Vereinigung Ergebnisse von verschiedenen Tabellen nahe beieinander bringt, was es leicht macht, sie zusammenzufassen, aber nicht wirklich die Addition. Wenn Sie die Vereinigung vor dem Aggregieren durchführen, tun Sie dies jedoch, wenn Sie einen Alias ​​eingeben. Da du den Alias ​​benutzt hast, gebe ich dir die Antwort. Danke euch :) – Niehm

1

Möglicherweise möchten Sie UNION es stattdessen.

SELECT ce.email, count(*) AS TOTAL_FACILITIES 
FROM table1 AS ce 
GROUP BY ce.email 
UNION 
SELECT ca.emails, count(*) AS TOTAL_FACILITIES 
FROM table2 AS ca 
GROUP BY ca.emails 
ORDER BY TOTAL_FACILITIES DESC 

Eine bessere Lösung ist es UNION es vor der Aggregation.

SELECT email, COUNT(*) AS TOTAL_FACILITIES 
FROM (
    SELECT facilities, email 
    FROM table1 
    UNION ALL 
    SELECT facilities, email 
    FROM table2 
) 
GROUP BY email 
ORDER BY TOTAL_FACILITIES DESC