【问题标题】:4 table join so that only 1 response is given for each company instead of a result for each campaign4 表连接,因此每个公司只给出 1 个响应,而不是每个活动的结果
【发布时间】:2009-09-10 19:50:49
【问题描述】:

感谢您的帮助!

我想将在其任何 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)

表:服务器文件 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)

如何将查询更改为仅针对每家公司给我一个回复,总结该公司下的所有广告系列。

非常感谢您的帮助。

【问题讨论】:

  • +1 用于使用 initech,但这看起来像一个简单的按解决方案分组

标签: mysql join group-by


【解决方案1】:

我认为您的查询很好,除了 GROUP BY 子句。应该是

GROUP BY companies.companyName

【讨论】:

    【解决方案2】:

    将公司名称添加到组并执行 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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-14
      • 2021-02-23
      • 1970-01-01
      • 2022-01-13
      • 1970-01-01
      相关资源
      最近更新 更多