【问题标题】:postgresql count distinct on differect conditionpostgresql 在不同条件下计数不同
【发布时间】: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 谢谢你的解释,我没看到。这个问题已经解决了,但我一定会翻译我未来的问题。

标签: sql postgresql group-by


【解决方案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

【讨论】:

  • 是的,谢谢,但是没有子查询可以吗?
  • 根据您的示例编号。否则,如果您想要一行查询,您可以使用存储过程来完成。
  • 如果这个解决了您的问题,则标记为已回答
猜你喜欢
  • 2022-09-22
  • 2014-04-02
  • 2021-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多