2016-05-02 10 views
0

Ich habe eine Berichtstabelle in meiner Datenbank. Ich führe eine komplexe Abfrage aus und ich möchte eindeutige Bericht-IDs aus dem Ergebnis zählen.mysql DISTINCT und Rails uniq einzigartige Datensätze zu finden

kann ich tun, dass die zwei Möglichkeiten, mit:

  1. ich DISTINCT in mysql Abfrage wie select count(DISTINCT id) from reports where ...

  2. verwende ich den Einsatz von Rails uniq Methode auf dem Ergebnis der Ausführung rohe SQL-Abfrage machen.

Aber diese beiden Nummern unterscheiden sich.

Auch, wenn ich LIMIT(n) with DISTINCT query (#1) verwende, stimmen diese beiden Zahlen überein. Ich bin mir nicht sicher warum das passiert! Für diese Spalte in meiner Tabelle sind keine NULL-Werte vorhanden.

Dies ist die mysql query:

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 query:

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 
+0

'Ich verwende Rails uniq-Methode auf das Ergebnis der Ausführung von Raw-SQL-Abfrage. Enthält Ihre Raw-Abfrage nur 'ID' oder andere Spalten? – lad2025

+0

könnten Sie die Frage mit Beispiel sqls elabobate? –

+0

Mysql-Abfrage hinzugefügt. –

Antwort

0

Da Sie bereits rohe SQL verwendet haben, könnten Sie auch, verwenden sie die gesamte Aufgabe

abzuschließen
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