感谢您的帮助!
我想输出所有在任何serverFiles上传的公司名称条目:
companies.companyName - count(files.fileID) - sum(serverFiles.uniqueUploads)
Initech Ltd. - 11 - 24931
Epiphyte Inc. - 23 - 938821
以下是我的表结构的相关部分:
表:公司
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) - 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)
如何更改查询,只为每个公司提供一个回复,总结该公司下的所有广告系列。
非常感谢您的帮助。
答案 0 :(得分:2)
我认为您的查询很好,但GROUP BY子句除外。应该是
GROUP BY companies.companyName
答案 1 :(得分: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;