我有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,然后我的计数不工作所以我需要一种方法只写一个公司名称,例如第一个,任何建议?答案 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
如果有人需要,这是解决方案。