4 Tabelle join so dass nur 1 Antwort für jedes Unternehmen anstelle eines Ergebnisses für jede Kampagne gegeben
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.
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;