What this quiz covers
This quiz focuses on Group By Summaries, giving you a quick way to practice the rules, question types, and explanations that matter most for Business Analytics.
An Orders dataset has one row for order 101 with an order total of $100 and one row for order 102 with an order total of $80. In an OrderItems dataset, order 101 has two item rows and order 102 has one item row. An analyst joins the datasets on order ID, groups by sales region, and calculates SUM(order_total) without first restoring one row per order.
What regional order total will the joined-data summary report?
Business Analytics Quiz
Practice Group By Summaries in Business Analytics with focused quiz questions that help you check what you know, review explanations, and build confidence with test-style prompts.
This quiz focuses on Group By Summaries, giving you a quick way to practice the rules, question types, and explanations that matter most for Business Analytics.
Try each quiz question before looking at the correct answer. Use the explanations to review missed ideas, then come back to similar questions until the pattern feels familiar.
An Orders dataset has one row for order 101 with an order total of $100 and one row for order 102 with an order total of $80. In an OrderItems dataset, order 101 has two item rows and order 102 has one item row. An analyst joins the datasets on order ID, groups by sales region, and calculates SUM(order_total) without first restoring one row per order.
What regional order total will the joined-data summary report?
SUM operate on rows, not on logical entities.
Here's what happens in this scenario. Order 101 has two item rows in OrderItems, so after joining, it appears twice in the result, each time carrying its $100 order total. Order 102 has one item row, so it appears once with its $80 total. When you call SUM(order_total), you're summing all rows: $100+$100+$80=$280. That confirms D is correct — the duplication of order 101 inflates the sum.
A describes the intended outcome if you had deduplicated first (e.g., by aggregating order totals before joining, or using DISTINCT carefully). $100+$80=$180 is the correct business answer, but it's not what this flawed query produces. B introduces averaging, which no part of the query performs — SUM and AVG are entirely different aggregations, and nothing here divides by two. C gets the duplication concept partially right but claims only $200, as if order 102 were also doubled — it wasn't, because it has only one item row and therefore appears only once.
As a study habit, whenever you see a join followed by an aggregation, always ask yourself: "How many rows does each source record produce after the join?" Fan-out from one-to-many relationships is one of the most common sources of inflated metrics in real-world data pipelines.An orders dataset contains one row per order, including region, status, and profit. A manager wants regions whose combined profit from completed orders exceeds $50,000. Individual completed orders need not exceed that amount.
Which SQL-like sequence correctly produces the requested group-by summary?
WHERE status = 'Completed' GROUP BY region HAVING SUM(profit) > 50000 (correct answer)GROUP BY region HAVING status = 'Completed' AND SUM(profit) > 50000WHERE status = 'Completed' AND profit > 50000 GROUP BY regionWHERE status = 'Completed' GROUP BY region HAVING AVG(profit) > 50000WHERE filters individual rows before grouping, while HAVING filters groups after aggregation. Keep that sequence in mind and this question becomes straightforward.
The manager wants regions where the total profit from completed orders exceeds $50,000. Answer A handles this perfectly. First, WHERE status = 'Completed' removes any non-completed orders from consideration. Then GROUP BY region bundles the remaining rows by region. Finally, HAVING SUM(profit) > 50000 checks whether each region's combined profit clears the threshold — exactly what was requested.
B is invalid because HAVING cannot filter on a non-aggregated column like status after grouping has already collapsed the rows. The status filter must happen before grouping, using WHERE. C applies profit > 50000 in the WHERE clause, which incorrectly eliminates individual orders under $50,000 — but the passage explicitly says individual orders need not exceed that amount. This would exclude valid orders and undercount regional totals. D uses AVG(profit) instead of SUM(profit), which answers a completely different question (average order profitability per region, not total), making it the wrong aggregate function for the stated goal.
A useful memory aid: think of the clause order as a pipeline — WHERE narrows the raw rows, GROUP BY bundles them, HAVING filters the bundles. Any answer that disrupts this pipeline or uses the wrong aggregate is a trap.An experiment is summarized by acquisition channel. In the paid channel, variant A has 9 conversions among 10 users, while variant B has 80 among 100 users. In the organic channel, variant A has 1 conversion among 10 users, while variant B has 0 among 1 user.
Which conclusion is best supported when the channel-level groups are also aggregated overall?
A forecasting model is evaluated in two customer segments. Segment X contains 20 observations and has an RMSE of 2. Segment Y contains 80 observations and has an RMSE of 4. Both segment RMSE values were calculated from the same type of prediction error.
What is the model's overall RMSE across all 100 observations?
A retailer summarizes completed orders by region. North has 25 orders with an average order value of $140, Central has 35 orders with an average of $100, and South has 40 orders with an average of $70.
What is the average order value across all completed orders?
A customer-service dataset contains four records for one agent. Their resolution times are 100 minutes, a missing value, 200 minutes, and 0 minutes. A SQL summary calculates AVG(resolution_minutes), COUNT(resolution_minutes), and COUNT(*) for the agent.
Which set of grouped results should the summary return under standard SQL null handling?
AVG() and COUNT(column_name) both ignore null values, while COUNT(*) counts every row regardless of nulls. With that framework in mind, walk through the data: the three non-null resolution times are 100, 200, and 0 minutes. AVG(resolution_minutes) sums those three values — 100+200+0=300 — then divides by the count of non-null values, giving 300÷3=100 minutes. COUNT(resolution_minutes) counts only non-null entries, returning 3. COUNT(*) counts all four rows in the group, returning 4. This matches answer B.
A is wrong on two counts: it divides 300 by 4 (incorrectly including the null in the denominator) to get 75, and reports a nonmissing count of 4 rather than 3. C gets the average right but swaps the two counts — it reports the nonmissing count as 4 and the row count as 3, which is backwards. D ignores the 0-minute record entirely, as if zero were also missing; 0 is a valid value and must be included in calculations.
A quick memory anchor: think of COUNT(column) as "count what's actually there" and COUNT(*) as "count the seats at the table, empty or not." On exam questions, always check whether a zero value is being confused with a null — they are fundamentally different in SQL.A company reports daily sales using Pacific business dates, but its transaction timestamps are stored in UTC. A transaction recorded at 02:00 UTC on March 1 occurred at 18:00 Pacific time on February 28.
How should an analyst group the transactions to obtain accurate Pacific daily sales summaries?
An A/B test event dataset contains one row per website event. Each user is assigned to exactly one variant, may generate many events, and may generate multiple purchase events. The desired grouped metric is the percentage of assigned users in each variant who made at least one purchase.
Which aggregation most directly calculates the desired conversion rate for each variant?
SUM(CASE WHEN event_type = 'purchase' THEN 1 ELSE 0 END) / COUNT(*)COUNT(DISTINCT CASE WHEN event_type = 'purchase' THEN user_id END) / COUNT(DISTINCT user_id) (correct answer)COUNT(DISTINCT user_id) / COUNT(DISTINCT CASE WHEN event_type = 'purchase' THEN user_id END)COUNT(DISTINCT CASE WHEN event_type = 'purchase' THEN user_id END) / COUNT(*)COUNT(DISTINCT CASE WHEN event_type = 'purchase' THEN user_id END) returns each purchasing user exactly once regardless of how many purchase events they generated, and COUNT(DISTINCT user_id) gives the true denominator — all assigned users. That ratio is precisely the conversion rate you want.
Answer A divides purchase events by total rows, so a user with five purchases inflates the numerator and a user with many non-purchase events inflates the denominator — the result has no clean interpretation as a user-level conversion rate. Answer C flips the fraction entirely, putting purchasing users in the denominator and all users in the numerator, which would give a number greater than 1 whenever fewer than all users converted — mathematically inverted. Answer D correctly identifies purchasing users in the numerator but divides by COUNT(*), the total number of rows, not total users — mixing user-level counting with row-level counting produces a deflated, uninterpretable rate.
A reliable rule of thumb: whenever your desired metric is "percentage of users who did X," both your numerator and denominator should use COUNT(DISTINCT user_id) — one filtered, one not.A warehouse records one ending-inventory snapshot on each of three operating days in a month. The snapshots are 100, 120, and 80 units. Management requests average daily ending inventory, not units sold or inventory-days.
Which monthly group-by summary correctly measures the requested KPI?
SUM(ending_inventory) to report 300 units as the monthly inventory levelMAX(ending_inventory) to report 120 units as the representative daily levelAVG(ending_inventory) to report 100 units as average daily ending inventory (correct answer)MIN(ending_inventory) to report 80 units as the typical monthly inventory levelAVG(ending_inventory) computes, making C the correct answer. It directly answers the question as stated.
The distractors each represent a common analytic mistake. A uses SUM, which produces 300 units — a cumulative total across all snapshots. This would be meaningful if you were measuring total inventory-days or warehouse throughput, but summing ending snapshots doesn't yield a representative daily level; it overstates the figure by a factor of three. B uses MAX, returning 120 units — the single peak day. This might be useful for capacity planning, but it ignores the lower-inventory days entirely and distorts the typical picture. D uses MIN, returning 80 units — the lowest observation. Like MAX, it discards most of the data and represents a worst-case floor, not a typical level.
A useful rule of thumb: match the aggregation function to the business question word-for-word. "Average" → AVG. "Total" → SUM. "Peak" → MAX. "Floor" → MIN. On business-analytics exams, wrong answers often use plausible-sounding functions that measure something related but fundamentally different from what was requested.A customer may purchase in more than one region. A grouped summary reports 70 distinct purchasing customers in the East and 50 in the West. Of these customers, 20 purchased in both regions.
Which statement correctly describes the companywide distinct-customer count?