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 Postgresql count(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 在不同条件下计数不同的主要内容,如果未能解决你的问题,请参考以下文章

针对多个条件的不同记录的 SQL 计数

选择多个不同条件的计数,只计数不同,在一行中返回结果

根据 PostgreSQL 8.0.2 中不同列的条件进行排名

如果条件唯一,则 MySQL 不同计数

PostgreSQL 按特定条件分组并计数

SQL:为 ID 高于先前且满足条件的条目选择不同的计数