Bird
Raised Fist0
Ruby on Railsframework~5 mins

Group and having in Ruby on Rails - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What does the group method do in Rails ActiveRecord?
The group method groups query results by one or more columns, similar to SQL's GROUP BY. It helps organize data into sets based on shared values.
Click to reveal answer
intermediate
How do you use having in Rails ActiveRecord queries?
You use having to filter groups created by group. It works like SQL HAVING, letting you specify conditions on aggregated data.
Click to reveal answer
beginner
Example: How to find authors with more than 3 books using group and having?
Use Author.joins(:books).group(:id).having('COUNT(books.id) > 3'). This groups authors by id and filters those with more than 3 books.
Click to reveal answer
intermediate
Why use having instead of where after grouping?
where filters rows before grouping. having filters groups after aggregation. Use having to filter based on aggregate results.
Click to reveal answer
intermediate
Can you chain group and having with other ActiveRecord methods?
Yes, you can chain group and having with select, order, and joins to build complex queries.
Click to reveal answer
What does group(:category) do in a Rails query?
AFilters records where category is true
BGroups records by the category column
COrders records by category
DJoins category table
Which method filters groups after aggregation in Rails?
Ahaving
Bwhere
Cselect
Djoins
How to find users with more than 5 posts using ActiveRecord?
AUser.joins(:posts).where('posts.count > 5')
BUser.where('posts_count > 5')
CUser.order('posts_count > 5')
DUser.joins(:posts).group(:id).having('COUNT(posts.id) > 5')
Can having be used without group in Rails?
AOnly with <code>select</code>
BYes, always
CNo, it requires grouping
DOnly with <code>joins</code>
What SQL clause does Rails having correspond to?
AHAVING
BGROUP BY
CORDER BY
DWHERE
Explain how to use group and having together in Rails ActiveRecord queries.
Think about grouping data first, then filtering those groups.
You got /4 concepts.
    Describe a real-life scenario where you would use group and having in a Rails app.
    Imagine sorting and filtering collections of items by counts or sums.
    You got /3 concepts.

      Practice

      (1/5)
      1. What does the group method do in Rails ActiveRecord queries?
      easy
      A. It organizes records by shared column values into groups.
      B. It filters records based on a condition.
      C. It sorts records in ascending order.
      D. It deletes duplicate records from the database.

      Solution

      1. Step 1: Understand the purpose of group

        The group method collects records that share the same value in a specified column.
      2. Step 2: Compare with other options

        Filtering is done by where, sorting by order, and deleting duplicates is not the role of group.
      3. Final Answer:

        It organizes records by shared column values into groups. -> Option A
      4. Quick Check:

        Group = Organize by shared values [OK]
      Hint: Group means collect by same values, not filter or sort [OK]
      Common Mistakes:
      • Confusing group with where filtering
      • Thinking group sorts data
      • Assuming group deletes duplicates
      2. Which of the following is the correct syntax to group users by their city in Rails?
      easy
      A. User.group(:city).having(:count)
      B. User.group_by(:city).count
      C. User.group(:city).where(count)
      D. User.group(:city).count

      Solution

      1. Step 1: Identify correct method name for grouping

        The correct ActiveRecord method is group, not group_by.
      2. Step 2: Check chaining methods

        count can be chained after group to count grouped records. where and having require conditions, not just symbols.
      3. Final Answer:

        User.group(:city).count -> Option D
      4. Quick Check:

        Correct syntax uses group(:column) [OK]
      Hint: Use group(:column), not group_by, for ActiveRecord grouping [OK]
      Common Mistakes:
      • Using Ruby's group_by instead of ActiveRecord group
      • Trying to use having without conditions
      • Chaining where incorrectly after group
      3. Given the query Order.group(:status).having('count(*) > 5').count, what does it return?
      medium
      A. All statuses with their counts regardless of count value.
      B. An error because having cannot be used with count.
      C. A hash of statuses with counts only where count is more than 5.
      D. A list of orders filtered by status count less than 5.

      Solution

      1. Step 1: Understand group and having usage

        group(:status) groups orders by status. having('count(*) > 5') filters groups with more than 5 orders.
      2. Step 2: Analyze the count method

        count returns a hash with status keys and their counts, but only for groups passing the having condition.
      3. Final Answer:

        A hash of statuses with counts only where count is more than 5. -> Option C
      4. Quick Check:

        Group + having filters groups by count [OK]
      Hint: Having filters grouped results by condition, count returns hash [OK]
      Common Mistakes:
      • Thinking having filters individual records
      • Assuming count returns array, not hash
      • Believing having causes syntax error here
      4. Identify the error in this query: Product.group(:category).having(count > 10).count
      medium
      A. category is not a valid column for grouping.
      B. The having clause should be a string or SQL fragment, not a variable.
      C. count cannot be chained after having.
      D. group cannot be used with having in ActiveRecord.

      Solution

      1. Step 1: Check having syntax

        The having method expects a SQL string or expression, not a Ruby variable like count.
      2. Step 2: Validate chaining methods

        Using group with having and count is valid. The error is in how having is written.
      3. Final Answer:

        The having clause should be a string or SQL fragment, not a variable. -> Option B
      4. Quick Check:

        Having needs SQL string condition [OK]
      Hint: Use SQL string inside having, not Ruby variables [OK]
      Common Mistakes:
      • Passing Ruby variables directly to having
      • Thinking group and having can't be combined
      • Misunderstanding count chaining
      5. You want to count orders grouped by customer country, but only for countries with more than 3 orders total. Which query correctly achieves this?
      hard
      A. Customer.joins(:orders).group('customers.country').having('count(orders.id) > 3').count
      B. Customer.group(:country).having('orders.count > 3').count
      C. Customer.joins(:orders).group(:country).where('count(orders.id) > 3').count
      D. Customer.group(:country).count.having('count > 3')

      Solution

      1. Step 1: Join customers with orders

        To count orders per customer country, join customers with orders using joins(:orders).
      2. Step 2: Group by customers' country and filter groups

        Group by customers.country and use having('count(orders.id) > 3') to filter countries with more than 3 orders total.
      3. Step 3: Count grouped results

        Use count to get the total order count per country meeting the condition.
      4. Final Answer:

        Customer.joins(:orders).group('customers.country').having('count(orders.id) > 3').count -> Option A
      5. Quick Check:

        Join + group + having with SQL count condition [OK]
      Hint: Join related table before group and having with count condition [OK]
      Common Mistakes:
      • Using where instead of having for group filters
      • Not joining orders before grouping
      • Passing Ruby method calls inside having
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard