count表中每个对象的实例数

时间:2017-02-16 10:44:18

标签: sql postgresql

我有4张桌子

code {
id, 
name,
fiveDigit,
startDate,
endDate,
promo_code_id
}

promo_code {
id,
description,
title,
extraDigit,
createdDate
}

company {
id,
name
}

promo_code_company {
id,
promo_code_id,
company_id
}

我需要查询将返回所有代码的列表 - >促销代码,我需要2个额外的属性,将显示每个促销代码的公司数量和一个属性,将显示我只有一个公司的名称*我只需要显示一个公司,即使促销代码有多个公司。

我知道如何加入这些表来获取所有信息,但我不知道如何为每个促销代码获取numberOfCompanies。 我期待这样的反应:

name             fiveDigit         title          numberOfComapnies  companyName
super code       12345           some title            11             sample

我已经尝试过这样的事情了

SELECT pc.id, c.id
count(pc.id) numberOfComapnies,
FROM code c
LEFT OUTER JOIN promo_code pc ON pc.Id=c.promo_code_id
LEFT OUTER JOIN promo_code_company pcc ON pcc.promo_code_id = pc.Id
LEFT OUTER JOIN company co on co.id = pcc.company_id
GROUP BY pc.Id, c.id

当我这样做时,我会获得促销代码列表,但我会在每个促销代码上获得numberOfCompanies 1。基本上我需要在很多对许多表promo_code_company中进行计数,但我不知道该怎么做。如果我从GROUP BY中移除一个字段,我会得到像这样的错误

必须出现在GROUP BY子句中或用于聚合函数

编辑:所以我让查询工作,现在我想知道如何写一个公司的名称,当我例如选择c.id,然后我的计数不工作所以我需要一种方法只写一个公司名称,例如第一个,任何建议?

1 个答案:

答案 0 :(得分:0)

SELECT pc.id, pc.name, pc.description, c.name
MAX(co.name) companyName,
count(pc.id) numberOfComapnies,
FROM code c
LEFT OUTER JOIN promo_code pc ON pc.Id=c.promo_code_id
LEFT OUTER JOIN promo_code_company pcc ON pcc.promo_code_id = pc.Id
LEFT OUTER JOIN company co on co.id = pcc.company_id
GROUP BY pc.id, c.id

如果有人需要,这是解决方案。