mysql DISTINCT和Rails uniq查找唯一记录

时间:2016-05-02 06:59:15

标签: mysql ruby-on-rails

我的数据库中有一个报告表。我正在执行一个复杂的查询,我想从结果中计算唯一的报告ID。

我可以用2种方式做到这一点:

  1. 我在mysql查询中使用DISTINCT,如select count(DISTINCT id) from reports where ...

  2. 我对执行原始sql查询的结果使用了Rails uniq方法。

  3. 但这两个数字不同。

    此外,当我使用LIMIT(n) with DISTINCT query (#1)时,这两个计数都匹配。我不确定为什么会这样!我的表中此列没有NULL值。

    这是mysql查询:

    select count(distinct report_id)
      from table1 cas
     where not exists (select 1
                         from table2 t
                        where t.report_id = cas.report_id
                          and t.point_id = cas.point_id);
    

    Rails查询:

    ActiveRecord::Base.connection.execute("select report_id
      from table1 cas
     where not exists (select 1
                         from table2 t
                        where t.report_id = cas.report_id
                          and t.point_id = cas.point_id);").to_a.flatten.uniq.count
    

1 个答案:

答案 0 :(得分:0)

由于您已经使用过原始sql,因此您可以使用它来完成整个任务

ActiveRecord::Base.connection.execute("select count (distinct report_id) 
  from table1 cas
 where not exists (select 1
                     from table2 t
                    where t.report_id = cas.report_id
                      and t.point_id = cas.point_id);").first.count