2009-09-10 2 views
1

Спасибо за вашу помощь!4 таблицы соединяются так, что для каждой компании дается только 1 ответ, а не результат для каждой кампании

Я хотел бы выводить все записи COMPANYNAME, которые имеют загрузку через любой из их ServerFiles как:

companies.companyName - кол (files.fileID) - сумма (serverFiles.uniqueUploads)

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

Вот relavent части моей таблицы структуры:

Таблица: компании

companyID (INT) - companyName (TEXT) 

Таблица: кампании

campaignID(INT) - companyID (INT) 

Таблица: файлы

fileID (INT) - campaignID (INT) 

Таблица: ServerFiles serverFileID (INT) - FILEID (INT) - uniqueUploads (INT)

Каждая компания может иметь несколько кампаний.

В каждой кампании может быть несколько файлов.

Каждый файл может иметь несколько ServerFiles

Запрос я пытался использовать следующим образом:

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; 

Однако это возвращает несколько записей для каждой компании (так как он создает несколько выходов для каждой компании - по одной для каждой кампании в компании).

например:

companies.companyName - COUNT (files.fileID) - сумма (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) 

Как изменить запрос, чтобы только дать мне один ответ обратно на каждая компания, подводя итоги всех кампаний в рамках этой компании.

Большое спасибо за любую помощь.

+0

+1 для использования Initech, но это выглядит как простая группа по решению – mson

ответ

2

Ваш запрос в порядке, я думаю, за исключением предложения GROUP BY. Должно быть

GROUP BY companies.companyName 
+0

Спасибо, что работало красиво :) – salonMonsters

0

Добавить название компании в группу и выполнить MIN/MAX, чтобы захватить ее в списке выбора.

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; 

 Смежные вопросы

  • Нет связанных вопросов^_^