Find the salary gap (max salary minus min salary) across all employees in each department.
Problem Statement
Examples
Input: employees collection: +-----+-------+--------+ | _id | dept | salary | +-----+-------+--------+ | 1 | Eng | 120000 | | 2 | Eng | 80000 | | 3 | Sales | 70000 | | 4 | Sales | 90000 | | 5 | Eng | 100000 | +-----+-------+--------+
Output: +-------+-----------+-----------+ | _id | maxSalary | minSalary | +-------+-----------+-----------+ | Eng | 120000 | 80000 | | Sales | 90000 | 70000 | +-------+-----------+-----------+
Explanation: The query retrieves all documents from the collection that satisfy the specified filter criteria.
Complexity
Time Complexity: -
Space Complexity: -
Hints
Editorial & Approach
Problem Overview & Intuition
To solve "Salary Range Analysis", we query the MongoDB document store. The goal is to find the salary gap (max salary minus min salary) across all employees in each department. Using an aggregation pipeline, the database engine filters and structures the BSON documents efficiently.
Step-by-Step Approach
- Identify Target Collection: Access the collection through the
dbinstance. - Construct Query / Pipeline: Build the aggregation stages ($match, $group, $sort, etc.).
- Resolve Cursor: Invoke
.toArray()to transform the query cursor into the required array of documents.
Optimal Implementation (MongoDB)
function solve(db) {
return db.employees.aggregate([
{ $group: { _id: "$dept", maxSalary: { $max: "$salary" }, minSalary: { $min: "$salary" } } }
]);
}
Complexity Analysis
Key Considerations & Edge Cases
- Empty Collections: If no documents match, the query cleanly returns an empty array
[]. - Missing / NULL Fields: Missing fields in documents are handled safely without throwing runtime exceptions.
- Type Coercion: BSON types (ObjectId, Numbers, Strings) are compared strictly according to MongoDB specifications.