How to calculate Internal Mobility Rate
Internal mobility rate is the share of employees who moved to a new role or team within the company during a period.
Formula
Internal mobility rate = employees promoted or transferred in the period ÷ average headcountSQL query
This example assumes: role_changes(employee_id bigint, changed_at date, change_type text), employees(id, start_date date, end_date date). It is written in PostgreSQL syntax; date functions differ slightly in MySQL, BigQuery and SQLite, and your column names will differ from these.
SELECT COUNT(DISTINCT r.employee_id)::numeric
/ NULLIF((SELECT COUNT(*)
FROM employees
WHERE start_date <= CURRENT_DATE AND (end_date IS NULL OR end_date > CURRENT_DATE)), 0) AS mobility_rate
FROM role_changes r
WHERE r.change_type IN ('promotion', 'transfer')
AND r.changed_at >= CURRENT_DATE - 365;Common mistakes that make Internal Mobility Rate wrong
- Promotions and lateral transfers are different signals; report them separately as well as together.
- Anyone who moved twice should count once; use a distinct count.
- People who left after moving should still count if they moved during the period.
Ask for Internal Mobility Rate in plain English
Instead of writing the query yourself, you can type the question. SchemaChat turns it into SQL against your connected database or uploaded file, runs it, and shows the SQL and the figures it used so you can check the answer before you share it. It does not replace your judgement about the definition: check that the query matches the formula your business uses.
- What share of employees were promoted or transferred in the last 12 months?
- Which departments have the most internal moves?