4つのテーブル結合。各キャンペーンの結果ではなく、各企業に1つの応答のみが提供されます。
質問
ご協力ありがとうございます!
serverFiles全体にアップロードされたすべてのcompanyNameエントリを次のように出力したい
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;
ただし、これは各会社に対して複数のエントリを返します(会社ごとに複数の出力を作成するため-会社のキャンペーンごとに1つ)。
eg:
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)
クエリを変更して、各企業に対して1つの応答のみを返し、その企業のすべてのキャンペーンを要約するにはどうすればよいですか。
ご協力いただきありがとうございます。
解決
GROUP BY句を除き、クエリは問題ないと思います。
GROUP BY companies.companyName
他のヒント
グループに会社名を追加し、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;
所属していません StackOverflow