2017-12-22 7 views
0

Ich versuche, den häufigsten Textwert (Land) aus der Datenbank zurückzugeben.Ermitteln Sie den häufigsten Spaltenwert zwischen allen Datensätzen

Während mein erster Versuch wird keine Fehler produzieren, vermute ich, es nicht ist der häufigste Wert zurück:

@mostpopularroast = Roast.group(:id).order("count(country) DESC").first 

Interessant mir genau das gleiche Resultat ergibt sollte ich ASC stattdessen verwenden.

Ich versuche daher jetzt eine Lösung aus diesem similar question:

@mostpopularroast = Roast.group('country').order('count(*)').limit(1).pluck(:country).first 

Aber das mir den Fehler undefined method 'country' for "Country 1":String gibt. Country 1 ist der Wert in der Datenbank.

mein Modell

class CreateRoasts < ActiveRecord::Migration[5.1] 
    def change 
    create_table :roasts do |t| 
     t.string :roaster 
     t.string :name 
     t.string :country 
     t.string :region 
     t.string :bestfor 
     t.string :beans 
     t.string :roast 
     t.string :slug 


     t.timestamps 
    end 
    end 
end 

Antwort

1

Sie gelten Bestellung absteigend die beliebtesten zu bekommen country:

Roast.group(:country).select(:country).order("count(*) desc").first.country 

Ihre erste Fehler nicht darauf verwandt ist, es ist nur, dass Sie verwenden pluck, die Array Objekt zurückgibt, dann rufen Sie first Methode auf und bekommen String Objekt, das das Objekt ist ist schon der Name des populärsten Röstlokals, aber dann versucht man country darauf anzurufen, was in der Ausnahme resultiert.

+0

Dies beschwert ich muss gruppieren auf ': ID'. Und das bringt mich nur zum ursprünglichen Fehler zurück. –

+0

@SimonCooper: Sie müssen nicht gruppieren auf ': ID', wenn dies die genaue Abfrage ist, die Sie verwenden – potashin

+0

@SimonCooper es würde helfen, wenn Sie die Abfrage, die Sie ausführen, und die generierte SQL-Abfrage-Ausgabe – potashin

Verwandte Themen