N026-M4 Tier 2 · Core SQL · medium hr · Helix Systems

Return each such employee's ID alongside their salary-record count (which will be `1`)

Part of Derived Tables (Subqueries in FROM) in SQL

The problem

Helix Systems' payroll team is auditing salary history. They want to identify employees who have exactly one salary record on file — employees who have never received a raise.

Write a query to return each such employee's ID alongside their salary-record count (which will be 1).

Assumptions:

  • The salaries table contains every salary record (current and historical).
  • An employee with one salary record has had a single compensation event — typically their initial hire — and no subsequent change.
  • The match is on equality with 1, not a comparison.

Output:

  • One row per qualifying employee, with columns employee_id and salary_count.
Schema · hr 4 tables
departments
id integer
name text
location text
budget numeric
salaries
id integer
employee_id integer
amount numeric
effective_date date
end_date? date
employees
id integer
name text
email text
department_id integer
manager_id? integer
hire_date date
title text
is_active boolean
job_history
id integer
employee_id integer
title text
department_id integer
start_date date
end_date? date

Run previews · Check grades

Write a query, then run it to see results here.

Worked solution Try it yourself first
Solution query
SELECT
  employee_id,
  salary_count
FROM
  (
    SELECT
      employee_id,
      COUNT(*) AS salary_count
    FROM
      salaries
    GROUP BY
      employee_id
  ) AS emp_salary_counts
WHERE
  salary_count = 1

The shape

The inner query counts salary records per employee; the outer query keeps only the rows where that count is exactly one. The equality filter on the aggregated column is the load-bearing part — these are employees with no compensation history beyond the initial record.

Clause by clause

  • The inner block computes one row per employee with their salary-record count:
SELECT employee_id, COUNT(*) AS salary_count
FROM salaries
GROUP BY employee_id

Every employee with a salary row appears once, with their tally next to them. - FROM (...) AS emp_salary_counts materialises the result as a derived table. - WHERE salary_count = 1 is the equality match. It picks out exactly the employees whose tally is one — no more, no less. The audit returns 4 employees: 16, 31, 44, and 55. - SELECT employee_id, salary_count returns each qualifying employee alongside the count. The count column will read 1 on every row by construction, which is the payroll team's confirmation that the filter did what it should.

Why this and not WHERE salary_count > 1 and invert mentally

The equality filter says exactly what the prompt asks: employees with one record. Inverting the question — "everybody except the multi-record employees" — would require either a NOT IN against a separate query or an explicit < 2 comparison. Both work, but neither says the same thing as cleanly. The equality form maps one-to-one onto the prompt's business definition.

The derived table form makes the count a real column for any downstream operation.

You practiced equality-based filtering on an aggregate via a derived table. The recurring rule: WHERE col = 1 outside the derived table works the same way as HAVING COUNT(*) = 1 inside a GROUP BY — same answer, different scaffold.

How you actually get good at SQL

Reading explains SQL. Writing it, over and over with instant feedback, is what makes you fluent.

That's the whole SQLMaxx loop: 600+ real problems, instant AI feedback, mastery you can actually see, and spaced review that won't let you forget.

A stack of SQL practice problem cards, the top card showing an employees table.
615 problems · 66 concepts

Real problems. Not toy examples.

615 hand-built problems spanning all 66 concepts, from basic SELECTs to window functions, built on real schemas and real business questions, the kind you'll actually get asked on the job. Enough reps to make SQL automatic.

A retro computer showing a SQL query marked correct with a green checkmark.
Instant AI feedback

Write a query. Know if it's right in one second.

No copying an answer and hoping it clicked. The AI grader checks your real query against real data, catches exactly what's wrong, and explains the fix in plain English, like a senior analyst reading over your shoulder on every problem.

A circular mastery progress dial filling from blue to green, the SQLMaxx diamond at its center.
Mastery tracking

Stop guessing whether you actually know it.

SQLMaxx tracks every concept and shows you what you've mastered and what's still shaky. Your skills fill in one concept at a time, so 'I think I get joins' becomes something you can prove.

A SQL query editor circled by a blue return arrow with a clock, scheduled to come back for review.
Spaced review

Learn it once. Keep it for good.

Most of what you learn this week fades by next week. So when a concept comes due for review, SQLMaxx hands you a fresh problem to solve from a blank editor, not a flashcard to re-read. A research-backed spaced-repetition algorithm (FSRS) times each return for right before you'd forget, so your SQL is still there months later, when the interview or the job actually needs it.

Practice, feedback, mastery, review. That's the loop that turns reading into real skill.

Start free

No account, no credit card. Start solving in under a minute.