我尝试使用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"},
...
我认为使用直线活动记录会更清晰。关于如何改进此查询的任何建议?
谢谢。
答案 0 :(得分:0)
结果我得到了有效记录的正确结果。我可以在每个实例上调用#count,这会产生正确的结果,即使它在终端响应中没有明显的结果。