Sql 基于按计数分组的活动记录对象

Sql 基于按计数分组的活动记录对象,sql,ruby-on-rails,ruby,ruby-on-rails-3,postgresql,Sql,Ruby On Rails,Ruby,Ruby On Rails 3,Postgresql,您好,我是ROR开发人员,使用rails 3.2.13和Postgres数据库 我有两种型号: Question attr_accessible :category, :is_active, :question_text, :question_type_id, :survey_id, :user_id has_many :abusive_questions 及 从这里我想得到一个问题,哪个计数大于一个特定的值(例如:5) 我使用rails命令执行了以

您好,我是ROR开发人员,使用rails 3.2.13和Postgres数据库

我有两种型号:

Question
  attr_accessible :category, :is_active, :question_text, :question_type_id, :survey_id,
                  :user_id
  has_many :abusive_questions

从这里我想得到一个问题,哪个计数大于一个特定的值(例如:5)

我使用rails命令执行了以下操作

AbusiveQuestion.count(:group=>"abusive_questions.question_id")
得到

=> {1=>1, 5=>3, 3=>1} 
对于这个结果,关键是
question\u id
,值是计数,但我想得到哪个值大于某个特定动态值的问题(例如:2)

请帮帮我。

你可以使用having方法。

你可以使用having方法。


我想你会想
加入
问题
滥用问题
上,然后使用
选择
拥有
来获得你想要的

比如:

AbusiveQuestion.select('abusive_questions.*, count(question.id) as question_count').
  joins(:questions).
  group('abusive_questions.question_id').
  having('count(abusive_questions.question_id) > 5')

我想你会想
加入
问题
滥用问题
上,然后使用
选择
拥有
来获得你想要的

比如:

AbusiveQuestion.select('abusive_questions.*, count(question.id) as question_count').
  joins(:questions).
  group('abusive_questions.question_id').
  having('count(abusive_questions.question_id) > 5')

对于
having
子句,您的想法是正确的,但您不需要
count
部分。OP需要返回实际的
AbusiveQuestion
对象,而不仅仅是返回的结果计数。而且,
count\u all
也没有意义
having
需要执行聚合函数以限制组。您对
having
子句的想法是正确的,但不需要
.count
部分。OP需要返回实际的
AbusiveQuestion
对象,而不仅仅是返回的结果计数。而且,
count\u all
也没有意义<代码>拥有
需要执行聚合函数以限制组。感谢您捕获该参数@teeg!感谢您的回复和@CDub。我在你的查询中遇到了一些问题,所以我利用了你的想法得到了我的结果。如下是AbusiveQuestions.join(“join questions on questions.id=Abusiver questions.id”)。选择(“Abusiver questions.id,count(distinct(question)id))作为问题计数。)。分组(“Abusiver questions.id”)。拥有(“count(Abusiver questions.id)>?”,极限)谢谢你抓住了那个帕伦,@teeg!感谢您的回复和@CDub。我在你的查询中遇到了一些问题,所以我利用了你的想法得到了我的结果。如下是AbusiveQuestions.join(“join questions on questions.id=Abusiver questions.id”)。选择(“Abusiver questions.id,count(distinct(question)id))作为问题计数。)。分组(“Abusiver questions.id”)。拥有(“count(Abusiver questions.id)>?”,限额)
AbusiveQuestion.select('abusive_questions.*, count(question.id) as question_count').
  joins(:questions).
  group('abusive_questions.question_id').
  having('count(abusive_questions.question_id) > 5')