SQL (postgres) to ActiveRecord Query



我很难将此SQL查询转换为ActivereCord。这是我的SQL。

SELECT distinct stc_term_gpa,
    user_id,
    lesley_id,
    first,
    last,
FROM lesley_grades
ORDER BY user_id

这返回437行 - 我想要。我没有问题在SQL

中运行。

但是,当我尝试在控制台的导轨中运行它时:

LesleyGrade.select(:stc_term_gpa, :user_id, :lesley_id, :first, :last).distinct.order(:user_id)

我验证了Rails中的计数

LesleyGrade.select(:stc_term_gpa, :user_id, :lesley_id, :first, :last).distinct.order(:user_id).count(:all)

我返回1440行 - 这不是我想要的...这是我的DB中的所有数据行。

发生了什么事?

update

这很奇怪:

当我在Rails Console中运行Active Record查询并获得Count 1440

LesleyGrade.select(:stc_term_gpa, :user_id, :lesley_id, :first, :last).distinct.order(:user_id).count(:all)

我检查控制台中的SQL(ActivereCord生产的SQL),这就是它产生的:

SELECT DISTINCT 
    "lesley_grades"."stc_term_gpa", 
    "lesley_grades"."user_id", 
    "lesley_grades"."lesley_id", 
    "lesley_grades"."first", 
    "lesley_grades"."last" 
FROM "lesley_grades"   
ORDER BY "lesley_grades"."user_id" ASC

当我在SQL客户端中运行上述SQL时,我会得到437行。再次差异。

但是,当我使用Rails生产的SQL玩耍时,请在我的标准中使用Lesley_grades。,我得到1440行(即使我将ID放置在那里,也应该得到437吗?)

SELECT DISTINCT 
    "lesley_grades"."stc_term_gpa", 
   **"lesley_grades"."id"**, 
    "lesley_grades"."user_id", 
    "lesley_grades"."lesley_id", 
    "lesley_grades"."first", 
    "lesley_grades"."last"
FROM "lesley_grades"
ORDER BY "lesley_grades"."user_id" ASC

所以我想问题是ActivereCord是否有些偷偷地使用ID来使用ID,这就是为什么我收到1440的原因?我如何获得我独特的437行?

您仍然可以使用find_by_sql metod

query = "SELECT distinct stc_term_gpa, user_id,lesley_id,first,last
         FROM lesley_grades
         ORDER BY user_id"
expectedResult = LesleyGrade.find_by_sql(query)

最新更新