4 테이블 조인 각 캠페인에 대한 결과 대신 각 회사마다 1 개의 응답 만 제공됩니다.

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

  •  05-07-2019
  •  | 
  •  

문제

당신의 도움을 주셔서 감사합니다!

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)

표 : ServerFilesServerFileId (int) -FileId (int) -IniverUploads (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)

쿼리를 변경하려면 각 회사에 대해 한 번의 응답 만 제공하여 해당 회사의 모든 캠페인을 요약 한 방법입니다.

도움을 주셔서 감사합니다.

도움이 되었습니까?

해결책

쿼리는 괜찮습니다. 해야한다

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