条款PG :: SyntaxError:错误:子查询必须仅返回一列



我想通过自定义SQL查询来利用Rails范围。您可以单击这篇文章,以供我尝试 - 尤其是在ActiveAdmin中。

如何使用find_by_sql查询ActiveAdmin索引页?

基本上我正在尝试做这样的事情

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')

本质上,这是一个子句中的子查询。我只想返回每行的独特的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

不确定您要尝试的是什么,但是类似的事情至少应该解决您看到的邮政错误:

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 列。

最外层说:"给我所有行,其中 stc_term_gpa 值在 stc_term_gpa of of of of stc_term_gpa 我们刚刚选择的集合中。

编辑:听起来您根本没有WHERE子句。您想要类似的东西:

LesleyGrade.select('STC_TERM_GPA, TERM, last, first').group('STC_TERM_GPA').order('first, term ASC')

未经测试。但是要选择多个列,但是仅限于一列的不同值,您需要使用SQL的GROUP BY子句,该子句可通过group方法在Rails的ActiveRecord中获得。

btw,select distinct STC_TERM_GPA, TERM, last, first from lesley_grades order by first, term ASC将为您提供唯一的结果,而STC_TERM_GPA, TERM, last, first的组合,而不仅仅是STC_TERM_GPA。我假设在您想要所有这些列时,您只想在STC_TERM_GPA上进行区分。

最新更新