/ / ActiveRecord / Rails: najbardziej efektywny sposób zliczania wyników wielu zapytań - ruby-on-rails, ruby, activerecord

ActiveRecord / Rails: najbardziej efektywny sposób na zliczanie wyników wielu zapytań - ruby-on-rails, ruby, activerecord

Jestem nowy w ActiveRecord. Próbuję zoptymalizować zapytanie do bazy danych.

Mam Person model z gender kolumna. Osoby gender może mieć jedną z trzech wartości: male, female, lub transgendered. Chcę poznać liczbę osób każdej płci.

Obecnie robię to z trzema oddzielnymi zapytaniami do bazy danych.

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

Czy można by to uczynić bardziej wydajnymi? Czy istnieje sposób na połączenie ich w jedno wywołanie bazy danych?

Odpowiedzi:

1 dla odpowiedzi № 1

Możesz przeprowadzić grupowanie według zapytania, aby zagregować wszystkie dane:

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

Następnie możesz podzielić wartości i przypisać je do zmiennych.


2 dla odpowiedzi nr 2

Zapoznaj się z ActiveRecord :: Calculations. Składnia zależy od wersji Railsów.

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

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

count zwraca Hash like { "male" => 12, "female" ... }


1 dla odpowiedzi nr 3
Person.select("gender,count(*)").where(:gender => [:male,:female,:transgendered]).group(:gender)

wróci

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