postgresql 在不同条件下计数不同
Posted
技术标签:
【中文标题】postgresql 在不同条件下计数不同【英文标题】:postgresql count distinct on differect condition 【发布时间】:2017-04-10 09:28:23 【问题描述】:我被困在一个练习中,我需要计算对行星的唯一访问总数,但如果行星是月球 (maan),那么它应该计算两次。客户编号也应为 121
select case
when objectnaam = 'Maan' then count(objectnaam)
else count(distinct objectnaam)
end as aantal_bezoeken
from klanten inner join deelnames on klanten.klantnr = deelnames.klantnr
inner join reizen on deelnames.reisnr = reizen.reisnr
inner join bezoeken on reizen.reisnr = bezoeken.reisnr
where klanten.klantnr = 121
group by objectnaam
它给了我这个结果
aantal_bezoeken
1
4
1
1
但结果应该是
aantal_bezoeken
7
我只需要将所有这些值加在一起,但我不知道如何, 或者也许有更好更简单的解决方案。它应该没有子查询
【问题讨论】:
1) 你使用mysql还是postgresql? 2)以文本格式添加示例源数据和预期的最终结果 @VaoTsun 没有聚合函数不能嵌套 @OtoShavadze Postgresqlcount(distinct objectnaam)
不是对行星的唯一访问总数,而是正在访问的唯一行星(按名称)的总数。 -- 您的表和列的名称难以阅读。请将它们翻译成英文(通过替换它们,以提供可读的示例),或在下面(在问题本身中)提供翻译/解释。
@pozs 谢谢你的解释,我没看到。这个问题已经解决了,但我一定会翻译我未来的问题。
【参考方案1】:
试试这个:
select sum(aantal_bezoeken) as aantal_bezoeken from
(select case
when objectnaam = 'Maan' then count(objectnaam)
else count(distinct objectnaam)
end as aantal_bezoeken
from klanten inner join deelnames on klanten.klantnr = deelnames.klantnr
inner join reizen on deelnames.reisnr = reizen.reisnr
inner join bezoeken on reizen.reisnr = bezoeken.reisnr
where klanten.klantnr = 121
group by objectnaam) as a
【讨论】:
是的,谢谢,但是没有子查询可以吗? 根据您的示例编号。否则,如果您想要一行查询,您可以使用存储过程来完成。 如果这个解决了您的问题,则标记为已回答以上是关于postgresql 在不同条件下计数不同的主要内容,如果未能解决你的问题,请参考以下文章