/ / ActiveRecord / Rails: Effizienteste Methode zum Zählen der Ergebnisse mehrerer Abfragen - Ruby-on-Rails, Ruby, Activerecord

ActiveRecord / Rails: Die effizienteste Methode zum Zählen der Ergebnisse mehrerer Abfragen - Ruby-on-Rails, Ruby, Aktiverecord

Ich bin neu in ActiveRecord. Ich versuche, eine Datenbankabfrage zu optimieren.

Ich habe ein Person Modell mit gender Säule. Von einer Person gender kann einen von drei Werten haben: male, female, oder transgendered. Ich möchte die Anzahl der Personen jedes Geschlechts kennen.

Ich mache dies derzeit mit drei separaten Datenbankabfragen.

numMale = Person.where(:gender => :male).count
numFemale = Person.where(:gender => :female).count
numTrans = Person.where(:gender => :transgendered).count

Könnten diese effizienter gestaltet werden? Gibt es eine Möglichkeit, sie in einem einzigen Datenbankaufruf zu kombinieren?

Antworten:

1 für die Antwort № 1

Sie können eine Gruppe nach Abfrage erstellen, um alle Daten zu aggregieren:

Person.all(:group => "gender", :select => "gender, COUNT(*) as count")

Dann können Sie die Werte aufteilen und Ihren Variablen zuweisen.


2 für die Antwort № 2

Schauen Sie sich ActiveRecord :: Calculations an. Die Syntax hängt von Ihrer Rails-Version ab.

# Rails 3.2
Person.count(:group => :gender)

# Rails 4
Person.group(:gender).count

count Liefert einen Hash wie { "male" => 12, "female" ... }


1 für die Antwort № 3
Person.select("gender,count(*)").where(:gender => [:male,:female,:transgendered]).group(:gender)

würde zurückkehren

SELECT gender,count(*) FROM `people`  WHERE `people`.`gender` IN ("male", "female", "transgendered") GROUP BY gender