sql - 高级计数和加入 Rails

标签 sql ruby-on-rails activerecord

我试图找到顶部 n与文章相关的类别数量,两者之间存在 habtm 关系。这是我想要执行的 SQL,但我不确定如何使用 ActiveRecord 执行此操作,除了使用 find_by_sql方法。有没有办法用 ActiveRecord 方法做到这一点:

SELECT 
  "categories".id, 
  "categories".name, 
  count("articles".id) as counter 
FROM "categories"
JOIN "articles_categories" 
  ON "articles_categories".category_id = "categories".id
JOIN "articles" 
  ON "articles".id = "articles_categories".article_id
GROUP BY "categories".id
ORDER BY counter DESC
LIMIT 5;

最佳答案

您可以使用 find使用选项来实现相同的查询:

Category.find(:all, 
  :select => '"categories".id, "categories".name, count("articles".id) as counter', 
  :joins => :articles, 
  :group => '"categories".id', 
  :order => 'counter DESC', 
  :limit => 5
)

关于sql - 高级计数和加入 Rails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2952482/

相关文章:

ruby-on-rails - Controller 命名空间内未初始化的常量

sql - 如果两个值相等,order by 子句如何工作?

mysql - 如何复制另一列中相同值的列值?

ruby-on-rails - 如何从 spree 中删除模型验证

ruby-on-rails - RSpec 使用模型的旧属性字段?

ruby-on-rails - 在实例上重新定义单个方法以调用父类(super class)方法

sql - MySQL 选择唯一的名称配对

sql - 为什么索引不与子查询一起使用

ruby-on-rails - 将两个 ActiveRecord::Relation 与 OR 组合,而不是 AND,返回一个 Relation 而不是一个 Array 以便以后能够分页

ruby-on-rails-3 - Rails ActiveRecord 作用域是另一个作用域的 "opposite",或者是用户, "lack"是一个属性