Skip to main content
Database

Sum and Average

QueryValidateMedium

What you will learn

  • Every non-aggregate column in SELECT must appear in GROUP BY or the query is malformed (stricter in Postgres than MySQL)
  • COUNT(*) counts rows including NULL; COUNT(col) ignores NULL โ€” subtle but changes business logic
  • HAVING filters groups (aggregates); WHERE filters rows. Using WHERE on an aggregate produces SQL error โ€” test both filter positions

Description

Calculate total revenue and average order value.

Test Scenario

-- Your query:
SELECT
  SUM(total) as total_revenue,
  ROUND(AVG(total), 2) as avg_order_value,
  COUNT(*) as order_count
FROM orders;

-- Expected: Total, average, and count of all orders

Testing Tips

  • โ€ขSUM() adds all values
  • โ€ขAVG() calculates mean
  • โ€ขROUND() for formatting decimals
// Playwright API Testing - Database
import { test, expect } from '@playwright/test';
test('Database query via API', async ({ request }) => {
const response = await request.post('/api/database/query', {
data: {
sql: 'SELECT * FROM users WHERE id = ?',
params: [1]
}
});
expect(response.ok()).toBeTruthy();
const { rows } = await response.json();
expect(rows.length).toBeGreaterThan(0);
});

Challenge ID: sql-sum-avg

2 frameworks available