Вы действительно должны думать о SQL, необходимом для написания такого запроса, поэтому следующие запросы должны работать во всех базах данных:
Количество книг по публикацииhouse
PublishingHouse.all(:joins => :book, :select => "books.publishing_house_id, publishing_houses.name, count(*) as total", :group => "1,2")
Количество книг, написанных автором в этом месяце
Если вы собираетесь переместить это в сферу - вам нужно будет поместить этов лямбде
Author.all(:joins => :books, :select => "books.author_id, author.name, count(*) as total", :group => "1,2", :conditions => ["books.pub_date between ? and ?", Date.today.beginning_of_month, Date.today.end_of_month])
это связано с использованием Date.today, в качестве альтернативы - вы можете использовать now () :: date (для postgres) и строить даты на основе этого.
Книги определенного состояния
Не совсем уверен, что это правильно с вашей моделью данных
Book.all(:joins => :state, :select => "states.name, count(*) as total", :group => "1")
Все сделано с помощью магии SQL.