4 Tabelle join so dass nur 1 Antwort für jedes Unternehmen anstelle eines Ergebnisses für jede Kampagne gegeben

StackOverflow https://stackoverflow.com/questions/1407359

  •  05-07-2019
  •  | 
  •  

Frage

Vielen Dank für Ihre Hilfe!

Ich mag würde alle Einträge companyauszugeben, Uploads über jede ihrer Serverfiles wie haben:

companies.companyName - count (files.fileID) - Summe (serverFiles.uniqueUploads)

Initech Ltd.   -  11 -  24931
Epiphyte  Inc.  -  23  - 938821

Hier sind die relavent Teile meiner Tabellenstruktur:

Tabelle: Unternehmen

companyID (INT)  -  companyName (TEXT)

Tabelle: Kampagnen

campaignID(INT)  -  companyID (INT)

Tabelle: Dateien

fileID (INT)  -  campaignID (INT)

Tabelle: Serverdateien     serverFileID (INT) - fileID (INT) - uniqueUploads (INT)

Jedes Unternehmen kann mehrere Kampagnen hat.

Jede Kampagne kann mehrere Dateien hat.

Jede Datei kann mehrere Serverfiles haben

Die Abfrage Ich habe versucht, ist wie folgt zu verwenden:

SELECT companies.companyName, sum(serverFiles.uniqueUploads), count(files.fileID)
FROM companies
INNER JOIN campaigns on companies.companyID = campaigns.companyID
INNER JOIN files on files.campaign = campaigns.campaignID
LEFT OUTER JOIN serverFiles on serverfiles.fileID = files.fileID
GROUP BY serverFiles.uniqueUploads, files.fileID
ORDER BY sum(serverFiles.uniqueUploads) DESC;

Allerdings gibt diese mehrere Einträge für jedes Unternehmen (wie es mehrere Ausgänge für jedes Unternehmen erstellt - einen für jede Kampagne unter der Firma).

Beispiel:

companies.companyName - count (files.fileID) - Summe (serverFiles.uniqueUploads)

Initech Ltd.   -  2 -  234234     (for initech campaign1)
Initech Ltd.   -  4 -  223323    (for initech campaign2)
Epiphyte  Inc.  -  13  - 6434   (for epiphyte campaign1)
Initech Ltd.   -  1 -  554     (for initech campaign3)
Epiphyte  Inc.  -  13  - 7544   (for epiphyte campaign2)
Epiphyte  Inc.  -  11  - 74545   (for epiphyte campaign3)
Epiphyte  Inc.  -  23  - 456544   (for epiphyte campaign4)

Wie kann ich die Abfrage ändern, um nur eine Antwort geben Sie mir für jedes Unternehmen zurück, unter dieser Gesellschaft alle Kampagnen zusammen.

Vielen Dank für jede Hilfe.

War es hilfreich?

Lösung

Ihre Anfrage ist in Ordnung, ich denke, mit Ausnahme der GROUP BY-Klausel. Sollte

GROUP BY companies.companyName

Andere Tipps

Fügen Sie den Firmennamen in der Gruppe und führen Sie eine MIN / MAX ein in der Auswahlliste zu greifen.

SELECT MAX(companies.companyName), sum(serverFiles.uniqueUploads), count(files.fileID)
FROM companies
INNER JOIN campaigns on companies.companyID = campaigns.companyID
INNER JOIN files on files.campaign = campaigns.campaignID
LEFT OUTER JOIN serverFiles on serverfiles.fileID = files.fileID
GROUP BY companies.companyName, serverFiles.uniqueUploads, files.fileID
ORDER BY sum(serverFiles.uniqueUploads) DESC;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top