【发布时间】:2013-10-16 22:27:55
【问题描述】:
我在 Rails 中有一个相当长的 SQL 查询:
Region.includes(:answers, answers: :choice)
.where('choices.id IS NULL OR choices.id = ?', 28)
.where('answers.id IS NULL OR answers.question_id = ?', 14)
.group("regions.region","choices.choice").count("answers")
这给了我所有区域的哈希,包括选择名称和答案计数,即使计数为零。这是输出:
{["East", nil]=>0, ["East Midlands", nil]=>0, ["London", nil]=>0, ["North East", nil]=>0, ["North West", nil]=>0, ["Northern Ireland", nil]=>0, ["Rest of World", "No"]=>3, ["Scotland", nil]=>0, ["South East", nil]=>0, ["South West", nil]=>0, ["Wales", nil]=>0, ["West Midlands", nil]=>0, ["Yorkshire and the Humber", nil]=>0}
目前唯一有答案的地区是“世界其他地区”,其中显示选项名称“否”。
所有其他项目都显示“nil”作为选项名称 (choices.choice)。如何更改查询以输出选择名称“否”而不是 nil,即使没有与之关联的答案?
谢谢
【问题讨论】:
-
通过向数据库添加默认值?
-
到哪个型号?我不确定这是否可行。查询正在计算答案。每个答案在创建时都由 region_id 分配一个给定的区域。我在创建问题时已经有一个默认的“投票”值,但这不是按地区划分的。
-
啊好的,所以没有设置关系。不是说数据库中有
NULL作为choice.choice的值吗? -
是的,没错。我需要查询中的“IS NULL”部分,以便显示所有区域和选择,无论计数为零。
-
我认为您必须像答案中描述的那样以编程方式执行此操作。
标签: sql ruby-on-rails postgresql activerecord