Hierarchy Questions and answers

 


📌 Table: emp_details

idnamemanager_iddesignation
1shripadhNULLceo
2satya5software engineer
3jia5data analyst
4david5data scientist
5michael7manager
6aravind7architect
7asha1cto
8mariyam1manager
9reshma8business analyst
10akshay8java developer

✅ 1. Top-Down Hierarchy (CEO → All Employees)

👉 MOST IMPORTANT QUERY

WITH emp_hierarchy AS (
SELECT
id,
name,
manager_id,
designation,
0 AS level
FROM emp_details
WHERE manager_id IS NULL -- CEO

UNION ALL

SELECT
e.id,
e.name,
e.manager_id,
e.designation,
h.level + 1
FROM emp_details e
JOIN emp_hierarchy h
ON e.manager_id = h.id
)
SELECT *
FROM emp_hierarchy
ORDER BY level, manager_id;

🔹 Output (Hierarchy Level)

idnamedesignationlevel
1shripadhceo0
7ashacto1
8mariyammanager1
5michaelmanager2
6aravindarchitect2
9reshmabusiness analyst2
10akshayjava developer2
2satyasoftware engineer3
3jiadata analyst3
4daviddata scientist3

✅ 2. Employee → Manager Chain (Bottom-Up)

👉 “Show reporting chain for an employee”

WITH reporting_chain AS (
SELECT
id,
name,
manager_id,
designation,
0 AS level
FROM emp_details
WHERE name = 'satya'

UNION ALL

SELECT
e.id,
e.name,
e.manager_id,
e.designation,
rc.level + 1
FROM emp_details e
JOIN reporting_chain rc
ON rc.manager_id = e.id
)
SELECT *
FROM reporting_chain;

🔹 Output

namedesignationlevel
satyasoftware engineer0
michaelmanager1
ashacto2
shripadhceo3

✅ 3. Hierarchy with Path (Org Tree Path)

👉 Very popular senior-level question

WITH emp_path AS (
SELECT
id,
name,
manager_id,
CAST(name AS VARCHAR(500)) AS hierarchy_path
FROM emp_details
WHERE manager_id IS NULL

UNION ALL

SELECT
e.id,
e.name,
e.manager_id,
CAST(p.hierarchy_path + ' -> ' + e.name AS VARCHAR(500))
FROM emp_details e
JOIN emp_path p
ON e.manager_id = p.id
)
SELECT *
FROM emp_path;

🔹 Output

shripadh
shripadh -> asha
shripadh -> mariyam
shripadh -> asha -> michael
shripadh -> asha -> aravind
shripadh -> mariyam -> reshma
shripadh -> mariyam -> akshay
shripadh -> asha -> michael -> satya
shripadh -> asha -> michael -> jia
shripadh -> asha -> michael -> david

✅ 4. Find Direct Reports of a Manager

👉 “Who reports to Asha?”

SELECT *
FROM emp_details
WHERE manager_id = (
SELECT id FROM emp_details WHERE name = 'asha'
);

✅ 5. Find All Subordinates Under a Manager

👉 “All employees under Asha (any level)”

WITH subordinates AS (
SELECT id, name, manager_id
FROM emp_details
WHERE name = 'asha'

UNION ALL

SELECT e.id, e.name, e.manager_id
FROM emp_details e
JOIN subordinates s
ON e.manager_id = s.id
)
SELECT *
FROM subordinates
WHERE name <> 'asha';

✅ 6. Count Employees Under Each Manager

👉 Very common business question

WITH emp_tree AS (
SELECT id, manager_id
FROM emp_details
WHERE manager_id IS NOT NULL

UNION ALL

SELECT e.id, e.manager_id
FROM emp_details e
JOIN emp_tree t
ON e.manager_id = t.id
)
SELECT manager_id, COUNT(*) AS total_reportees
FROM emp_tree
GROUP BY manager_id;

✅ 7. Leaf Employees (No Reportees)

👉 “Who are individual contributors?”

SELECT *
FROM emp_details e
WHERE NOT EXISTS (
SELECT 1
FROM emp_details x
WHERE x.manager_id = e.id
);

🧠 INTERVIEW SUMMARY (MUST SAY THIS)

“I use recursive CTEs for hierarchical data to support both top-down and bottom-up traversal, including levels and path generation.”

Comments

Popular posts from this blog

SyBase Database Migration to SQL Server

Basics of US Healthcare -Medical Billing