【问题标题】:ROR: Help for simple sum sql queryROR:简单 sum sql 查询的帮助
【发布时间】:2016-11-21 18:18:11
【问题描述】:

我有一个表,其中包含与每个 school_user 关联的 school_user_id 和家庭作业的值,如下所示:

create_table "homework_students", force: :cascade do |t|
    t.integer  "school_user_id", limit: 4, null: false
    t.integer  "homework_id",    limit: 4, null: false
    t.datetime "completed_on"
    t.datetime "created_at",               null: false
    t.datetime "updated_at", 

每个 school_user 都与一个单独的作业相关联,而作业有许多 school_user。

我正在尝试在我的视图中打印连接到单个作业的 school_users 总数。

在我的控制器中:

@total = HomeworkStudent.where("SELECT homework_id FROM homework_students WHERE 'school_user_id = (?)'").sum(:school_user_id)

型号

homework
has_many :homework_students, :class_name => 'HomeworkStudent'

homework_students
belongs_to :homework, :class_name => 'Homework', :foreign_key => :homework_id

我认为这在我的语法中不正确 - 它一直打印 0。

有什么想法和更好的方法可以做到这一点吗?

编辑

知道了。

@total = HomeworkStudent.find_by_sql("SELECT homework_id FROM homework_students WHERE school_user_id GROUP BY homework_id").count

还是想知道有没有更好的办法。

【问题讨论】:

  • 总和? .. 还是数数?
  • @DavidAldridge 嗨!对不起,算了。我改变了它,但仍然返回 0。我想我的语法中有一些东西回到前面......

标签: sql ruby-on-rails ruby-on-rails-4 sum


【解决方案1】:

你犯了一些错误:

  1. where(...) 不应包含 WHERE 语句而不是完整查询
  2. 您的WHERE 语句包含一个未填充数据的占位符school_user_id = (?)
  3. 您的 WHERE 语句被包装到 ' 中,这导致在 DB 中解释为字符串。

试试这个:

@total = HomeworkStudent.where(school_user_id: 123).count
# or
@total = HomeworkStudent.where("school_user_id = (?)", 123).count

【讨论】:

  • 谢谢,我进行了更改,但它仍然返回 0。:( 我想我已经接近了。
  • 当我遇到这样的问题时,我喜欢将它带到 Rails 控制台rails c 并查看 SQL 的样子。听起来你什么也得不到。如果您将.count 从末尾删除,您可能会看到没有返回任何内容。您可以将 SQL 剪切/粘贴到您选择的 SQL 程序中,看看发生了什么。
  • @Dan 谢谢,没有返回任何内容,但表格已正确填充 - 问题是查询。每个作业都有多个 school_users,我只是想返回每个作业的总数。
  • 感谢您的帮助,得到了这个:@total = HomeworkStudent.find_by_sql("SELECT homework_id FROM homework_students WHERE school_user_id GROUP BY homework_id").count 仍然有兴趣知道是否有更好的方法虽然...
【解决方案2】:

在 Rails 5 中,您只能使用带有 where 的键值。

同时您不需要将完整的sql查询代码写入where

对于计数,您使用简单的计数方法。

例如,

@users = User.where(age: 20).count 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-21
    • 2010-10-20
    相关资源
    最近更新 更多