当前位置: 首页 > 面试题库 >

ActiveRecord语法,用于在使用联接时查找平均评分为x或更高的所有项目

洪高阳
2023-03-14
问题内容

我的rails应用程序中有两个模型。项目和评论。评论属于商品,商品有很多评论。

审查模型如下所示:

create_table "reviews", :force => true do |t|
  t.text     "comment"
  t.integer  "rating"
  t.integer  "reviewable_id"
  t.string   "reviewable_type"
  t.datetime "created_at"
  t.datetime "updated_at"
end

(评论是多态的,所以这就是为什么它们具有reviewable_id和reviewable_type的原因)

我正在尝试汇总一个ActiveRecord查询,该查询将允许我选择平均评分为80或更高的所有项目。

我已经尝试过一些我认为可以解决的不同变体

Item.joins(:reviews).where("avg(reviews.rating) > 80").group(:id)

但是,这导致以下错误:

Error: Mysql2::Error: Invalid use of group function: SELECT `items`.* FROM `items` INNER JOIN `reviews` ON `reviews`.`reviewable_id` = `items`.`id` AND `reviews`.`reviewable_type` = 'Item' WHERE (avg(reviews.rating) > 80) GROUP BY id

如果有人可以帮助,将不胜感激。


问题答案:

您应该将条件放在having而不是where。意义:

Item.joins(:reviews).group("reviews.reviewable_id").having("avg(reviews.rating) > ?", 80)


 类似资料:
  • 问题内容: 我有两个要与之进行内部联接的表。 一个是主键为的表。 另一个表是外键在哪里。也有一个列,其中where是表的外键。 我正在尝试汇总一个ActiveRecord查询,在这里我可以选择N天前或之前创建的所有用户,并且其中任何一个都没有等于特定ID的用户。我试图做这样的事情: 此查询字段超过30,000个结果,这是不正确的,因为Users表仅具有12,000行。 我到底在做什么错? 问题答案

  • 希望这对你来说是有意义的,我很乐意更详细地解释这个问题。

  • 我试图理解新的Java8流API。 http://docs.oracle.com/javase/tutorial/collections/streams/reduction.html 我找到了使用collect API查找数字平均值的示例。但我觉得,使用reduce()也可以做到这一点。

  • 我一直在寻找,没有找到一个简单的问题和答案堆栈溢出寻找一个数组的平均值。 这是我的阵列 我最初以为这个问题的答案是这样的: 然而,这给了我一个NaN的输出。 然后我尝试了这个: 这给了我68的输出。(我不知道为什么)。 所以我有两个问题。1。为什么我的输出是68?和2。有人能帮我找到数组的平均值吗?

  • 我正在尝试使用用户输入将数字放入一个数组,然后找到这些数字的平均值,也找到哪些数字大于平均值。这些数字进入一个数组,但当我试图求平均数时,我无法求出平均数,以及哪些数字大于平均数,因为对于试图求出大于平均数的数字的部分,并非所有变量都是可见的。但是,当我允许这个部分看到所有的变量(don't But{}围绕某些部分)时,它会找到每一个数的平均值。现在,它为每个数字打印平均值,而为大于平均值的数字打