为什么我的Active Record Query返回的结果与原始SQL不同

时间:2016-02-27 23:34:01

标签: sql ruby-on-rails activerecord

我尝试使用INNER JOIN,COUNT和GROUP BY进行查询,以按照标记的数量对我的标记进行排序,并将计数作为结果的一部分包含在内。原始sql返回我分组的实际Count,而活动记录不是。

Tag.joins(:taggings).select('tags.id, tags.name, COUNT(taggings.note_id) as count').group('tags.id').order('count desc').to_a

返回

[#<Tag:0x007fa663be15e8 id: "d40dac2e-917b-4078-dfdf-47c1a6d43c72", name: "name1">,
 #<Tag:0x007fa663be0918 id: "aa5d0f22-b6ad-46b0-sasa-0e2300ddc0fb", name: "name2">,
 #<Tag:0x007fa663bead28 id: "7880318b-9bdc-48f5-a93c-b4b393f15d8b", name: "name3">,
 #<Tag:0x007fa663beb228 id: "77c6ef97-f3ce-43be-vghf-45bb897fe4a7", name: "name4">,
...

但是当我将这个活动记录查询转换为原始SQL时,我得到了我实际上正在寻找的响应。

sql = Tag.joins(:taggings).select('tags.id, tags.name, COUNT(taggings.note_id) as count').group('tags.id').order('count desc').to_sql
ActiveRecord::Base.connection.execute(sql).to_a

返回

{"id"=>"d40dac2e-917b-4078-dfdf-47c1a6d43c72", "name"=>"name1", "count"=>"36"},
 {"id"=>"aa5d0f22-b6ad-46b0-sasa-0e2300ddc0fb", "name"=>"name2", "count"=>"24"},
 {"id"=>"7880318b-9bdc-48f5-a93c-b4b393f15d8b", "name"=>"name3", "count"=>"12"},
 {"id"=>"77c6ef97-f3ce-43be-vghf-45bb897fe4a7", "name"=>"name4", "count"=>"10"},
...

我认为使用直线活动记录会更清晰。关于如何改进此查询的任何建议?

谢谢。

1 个答案:

答案 0 :(得分:0)

结果我得到了有效记录的正确结果。我可以在每个实例上调用#count,这会产生正确的结果,即使它在终端响应中没有明显的结果。