Helix Systems' HR team is compiling a skills inventory and needs a complete list of job titles currently active in the organization.
Write a query to return each unique job title held by an employee, with no duplicates.
Assumptions:
- The
employeestable contains every active and former employee at Helix Systems. - The
titlecolumn records each employee's job title; many employees hold the same title.
Output:
- One row per unique job title, with a single column
title.
Schema · hr 4 tables
Run previews · Check grades
Write a query, then run it to see results here.
Worked solution Try it yourself first
SELECT DISTINCT
title
FROM
employees The shape
DISTINCT title collapses a column with one row per employee down to the active set of job titles at Helix Systems — 37 rows, one per unique title, from CEO and VP Engineering down through Sales Rep and Recruiter.
Clause by clause
SELECT DISTINCT titlereturns the uniquetitlevalues from the rowsFROMhands up. The deduplication runs over the full set of titles the candidate rows contribute; two employees who both holdSoftware Engineerproduce one row, not two.FROM employeesis the row source. Every employee — active or former, per the assumptions — contributes theirtitleto the candidate set. The result includes any title that was ever held, even by someone who has since left or been promoted into a different role.
Why this and not a hand-maintained titles list
In many organisations there is a separate canonical list of approved titles somewhere — a job-architecture spreadsheet, an HRIS lookup table. Reading from that list gives the set of titles HR has sanctioned. Running DISTINCT title on employees gives the set of titles that have actually been assigned. The two sets are not always the same: a title might exist in the architecture but be unused, or one might be in use that drifted from the canonical list.
For a skills inventory, the in-use set is the right answer — it reflects what work people are actually doing, not what the architecture document claims they could be doing. The cardinality being 37 instead of 4 doesn't change the shape; DISTINCT doesn't care whether the value space is small or large, it just runs the deduplication over whatever lands in front of it.
You practiced using DISTINCT on a free-text categorical column. The same shape applies whether the values are four (status) or forty (title) — DISTINCT doesn't care about cardinality, only about uniqueness.