【问题标题】:Rails: group and count sql query include zero'sRails:分组和计数 sql 查询包括零
【发布时间】:2013-10-16 19:04:00
【问题描述】:

我能够运行此查询以生成区域哈希并按答案分组(包括零计数):

Region.includes(:answers).group("regions.region").count("answers")

产生:

{"blar"=>0, "East"=>0, "East Midlands"=>11, "London"=>8, "North East"=>0, "North West"=>0, "Northern Ireland"=>0, "Rest of World"=>89, "Scotland"=>0, "South East"=>0, "South West"=>0, "Wales"=>0, "West Midlands"=>0, "Yorkshire and the Humber"=>0}

但是,当我希望某个特定问题的此结果(包括零个数)时,它只显示带有答案的区域的哈希值。

查询:

Region.includes(:answers).where("answers.question_id = 14").group("regions.region").count("answers")

产生:

{"East Midlands"=>3, "London"=>1, "Rest of World"=>4}

我知道查询将只选择 question_id 的答案,所以这给出了给定的输出,但我尝试了许多不同的查询(包括 LEFT OUT JOINS)并且无法获得所需的结果。

供参考:

区域 has_many :answers

回答belongs_to :region

回答belongs_to:问题

谢谢

【问题讨论】:

    标签: sql ruby-on-rails postgresql


    【解决方案1】:

    对于任何感兴趣的人,我可以通过将 sql IS NULL OR 添加到 where 子句来解决这个问题:

    Region.includes(:answers).where("answers.id IS NULL OR answers.question_id = 14").group("regions.region").count("answers")
    

    制作:

    {"blar"=>0, "East"=>0, "East Midlands"=>1, "London"=>0, "North East"=>0, "North West"=>0, "Northern Ireland"=>0, "Rest of World"=>4, "Scotland"=>0, "South East"=>0, "South West"=>0, "Wales"=>0, "West Midlands"=>0, "Yorkshire and the Humber"=>0} 
    

    可能不是最好的方法,但它完成了工作

    【讨论】:

      【解决方案2】:

      添加带有 NULL 的 SELECT,如下所示:

      Region.outer_joins(:answers).select('region.name IS NULL').
      

      【讨论】:

      • 如果我包含这个select方法结果是一样的
      猜你喜欢
      • 2023-03-19
      • 2021-12-28
      • 1970-01-01
      • 2021-11-19
      • 1970-01-01
      • 2021-11-27
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      相关资源
      最近更新 更多