我想利用自定义sql查询的rails scoping。您可以点击此帖子,我正在尝试 - 特别是在ActiveAdmin中。
How to use a find_by_sql query for an ActiveAdmin index page?
基本上我正在尝试做这样的事情
class YourModel < ActiveRecord::Base
scope :my_scope, where('some custom SQL')
scope :my_other_scope, where('some other custom SQL')
end
这是我在Rails C
LesleyGrade.where('select distinct STC_TERM_GPA,
TERM,
last,
first
from lesley_grades
order by first, term ASC')
本质上,它是where子句中的子查询。我只想为每个人每行返回一个不同的STC_TERM_GPA。
这些是lesley_grades
表中的属性,可能有助于理解我正在尝试检索的信息。
id
user_id
lesley_id
last
first
active
site
cohort
section
sections_title
faculty
completed_term_cred
term
sec_start_date
sec_end_date
grade
stc_cred
active_program
most_recent_program
intent_filed
stc_term_gpa
sta_cum_gpa
start_term
prog_status
last_change_date
created_at
updated_at
所以我想先看看这是否适用于Rails C
,这就是我所得到的。
LesleyGrade Load (51.1ms) SELECT "lesley_grades".* FROM "lesley_grades" WHERE (select distinct STC_TERM_GPA,
TERM,
last,
first
from lesley_grades
order by first, term ASC)
PG::SyntaxError: ERROR: subquery must return only one column
LINE 1: ...ECT "lesley_grades".* FROM "lesley_grades" WHERE (select di...
^
: SELECT "lesley_grades".* FROM "lesley_grades" WHERE (select distinct STC_TERM_GPA,
TERM,
last,
first
from lesley_grades
order by first, term ASC)
=> #<LesleyGrade::ActiveRecord_Relation:0x3fcb44d60944>
我不确定如何修复
PG::SyntaxError: ERROR: subquery must return only one column
答案 0 :(得分:1)
不确定你想要实现什么,但是这样的事情至少应该解决你所看到的postgres错误:
LesleyGrade.where('STC_TERM_GPA IN
(SELECT STC_TERM_GPA FROM
(SELECT DISTINCT STC_TERM_GPA, TERM, last, first
FROM lesley_grades
order by first, term ASC) AS results
)'
)
那里有几个层次:
最深层次说“给我所有行具有明显/唯一的列组合 STC_TERM_GPA,TERM,last和first
下一层说“在那些结果中,摆脱其他列,只给我 STC_TERM_GPA 列。
最外层说“给我所有 STC_TERM_GPA 值的行都在我们刚刚选择的 STC_TERM_GPA 的集合中。
编辑:听起来你根本不是WHERE
条款。你想要这样的东西:
LesleyGrade.select('STC_TERM_GPA, TERM, last, first').group('STC_TERM_GPA').order('first, term ASC')
那是未经测试的。但是要选择多个列,但限制为一列的不同值,您将需要使用SQL的GROUP BY
子句,该子句可通过ActiveRecord
方法在Rails'group
中使用。 / p>
BTW,select distinct STC_TERM_GPA, TERM, last, first from lesley_grades order by first, term ASC
会为您提供STC_TERM_GPA, TERM, last, first
组合中唯一的结果,而不是JUST STC_TERM_GPA
。我假设你想要所有这些列,你只需要STC_TERM_GPA
上的DISTINCT。