Unione di 4 tabelle in modo che venga data 1 sola risposta per ogni azienda anziché un risultato per ogni campagna

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

  •  05-07-2019
  •  | 
  •  

Domanda

Grazie per l'aiuto!

Vorrei produrre tutte le voci companyName che hanno caricamenti su uno dei loro file Server come:

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

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

Ecco le parti relavent della struttura della mia tabella:

Tabella: aziende

companyID (INT)  -  companyName (TEXT)

Tabella: campagne

campaignID(INT)  -  companyID (INT)

Tabella: file

fileID (INT)  -  campaignID (INT)

Tabella: file server     serverFileID (INT) - fileID (INT) - uniqueUploads (INT)

Ogni azienda può avere più campagne.

Ogni campagna può avere più file.

Ogni file può avere più file server

La query che ho provato a utilizzare è la seguente:

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;

Tuttavia, questo restituisce più voci per ogni azienda (in quanto crea più output per ciascuna società, una per ogni campagna della società).

es:

companies.companyName - count (files.fileID) - sum (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)

Come posso modificare la query per restituirmi una sola risposta per ciascuna società, riassumendo tutte le campagne di quella società.

Grazie mille per qualsiasi assistenza.

È stato utile?

Soluzione

La tua richiesta va bene, credo, fatta eccezione per la clausola GROUP BY. Dovrebbe essere

GROUP BY companies.companyName

Altri suggerimenti

Aggiungi il nome dell'azienda al gruppo ed esegui un MIN / MAX per afferrarne uno nell'elenco di selezione.

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;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top