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

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

  •  05-07-2019
  •  | 
  •  

Вопрос

Спасибо за вашу помощь!

Я хотел бы вывести все записи CompanyName, которые загружаются в любой из их серверных файлов, как:

companies.CompanyName - количество (файлов.fileID) - сумма (serverFiles.uniqueUploads)

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

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

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

companyID (INT)  -  companyName (TEXT)

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

campaignID(INT)  -  companyID (INT)

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

fileID (INT)  -  campaignID (INT)

Таблица:Серверные файлы serverFileID (INT) - Файловый идентификатор (INT) - Уникальные загрузки(INT)

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

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

Каждый файл может содержать несколько серверных файлов

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

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 - количество (файлов.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)

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

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

Это было полезно?

Решение

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

GROUP BY companies.companyName

Другие советы

Добавьте название компании в группу и выполните МИНИМАЛЬНОЕ / МАКСИМАЛЬНОЕ действие, чтобы выбрать одну из них в списке выбора.

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;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top