Count with ActiceRecord
published on NOV 1, 2018
Managers would love that. Active Record provides nice, simple and powerful methods for counting things we have in our database. The simplest one is
User.count User.where(first_name: "Nick").count
Calculating the average value of given column is also super easy. It’s all about calling
average and passing the desired column:
User.average(:salary) User.where(first_name: "Nick").average(:salary)
You don’t have to iterate over all users to sum their salary, you can do it on database level using the
sum method and passing column name:
User.sum(:salary) User.where(first_name: "Nick").sum(:salary)
If you want to get the highest salary you don’t have to order by salary and select one user, you can use the
User.maximum(:salary) User.where(first_name: "Nick").maximum(:salary)
If you want to find what salary is the lowest you can use the
User.minimum(:salary) User.where(first_name: "Nick").minimum(:salary)
Let’s switch to more complicated operations. You can easily combine group with all of the mentioned functions. It will give you hash instead of a collection of objects.
Above code produces hash including average salary for each location, useful, is not it?
Counting association seems to be a problematic part quite often. Let’s assume that each user can have many comments. Our goal is to show comments count for each user:
It’s simple as that.