0% found this document useful (0 votes)
1 views20 pages

Case When Coding Snippet

The document provides 50 SQL query examples demonstrating the usage of the CASE WHEN statement in various scenarios, including employee classification based on salary, experience, and other attributes. It covers basic usage, aggregations, joins, date functions, NULL handling, nested conditions, and advanced scenarios. Each example illustrates how to categorize or calculate values based on specific conditions within a dataset of employees.

Uploaded by

Dipak Patil
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
1 views20 pages

Case When Coding Snippet

The document provides 50 SQL query examples demonstrating the usage of the CASE WHEN statement in various scenarios, including employee classification based on salary, experience, and other attributes. It covers basic usage, aggregations, joins, date functions, NULL handling, nested conditions, and advanced scenarios. Each example illustrates how to categorize or calculate values based on specific conditions within a dataset of employees.

Uploaded by

Dipak Patil
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 20

50 Questions on CASE WHEN

Basic CASE WHEN Usage

1️.Classify employees based on salary brackets

SELECT Name, Salary,

CASE

WHEN Salary < 60000 THEN 'Low'

WHEN Salary BETWEEN 60000 AND 1️00000 THEN 'Medium'

ELSE 'High'

END AS SalaryCategory

FROM Employees;

2️.Check if employees are experienced or not

SELECT Name, Experience,

CASE

WHEN Experience >= 1️0 THEN 'Senior'

WHEN Experience BETWEEN 5 AND 9 THEN 'Mid-Level'

ELSE 'Junior'

END AS ExperienceLevel

FROM Employees;

Using CASE WHEN with Aggregations

3️.Count employees in each salary category

SELECT
CASE

WHEN Salary < 60000 THEN 'Low'

WHEN Salary BETWEEN 60000 AND 1️00000 THEN 'Medium'

ELSE 'High'

END AS SalaryCategory,

COUNT(*) AS EmployeeCount

FROM Employees

GROUP BY

CASE

WHEN Salary < 60000 THEN 'Low'

WHEN Salary BETWEEN 60000 AND 1️00000 THEN 'Medium'

ELSE 'High'

END;

4️.Total salary per department with categorization

SELECT Department,

SUM(Salary) AS TotalSalary,

CASE

WHEN SUM(Salary) > 2️00000 THEN 'High Budget'

ELSE 'Low Budget'

END AS BudgetCategory

FROM Employees

GROUP BY Department;

CASE WHEN with Joins

5.Classify employees with department details (using a join)


CREATE TABLE Departments (

DeptID INT PRIMARY KEY,

DeptName VARCHAR(50),

Budget DECIMAL(10,2)

);

INSERT INTO Departments (DeptID, DeptName, Budget) VALUES

(1, 'HR', 200000),

(2, 'IT', 500000),

(3, 'Finance', 300000);

SELECT e.Name, e.Department, d.Budget,

CASE

WHEN d.Budget > 4️00000 THEN 'Rich Department'

WHEN d.Budget BETWEEN 2️00000 AND 4️00000 THEN 'Moderate'

ELSE 'Low Budget'

END AS BudgetCategory

FROM Employees e

JOIN Departments d ON e.Department = d.DeptName;

CASE WHEN with Date Functions

6.Check if employees are recent joiners


SELECT Name, JoiningDate,

CASE

WHEN JoiningDate >= '2️02️2️-01️-01️' THEN 'New Joiner'

ELSE 'Experienced'

END AS JoiningCategory

FROM Employees;

7️.Assign financial quarter based on joining date

SELECT Name, JoiningDate,

CASE

WHEN MONTH(JoiningDate) IN (1️,2️,3️) THEN 'Q1️'

WHEN MONTH(JoiningDate) IN (4️,5,6) THEN 'Q2️'

WHEN MONTH(JoiningDate) IN (7️,8,9) THEN 'Q3️'

ELSE 'Q4️'

END AS FinancialQuarter

FROM Employees;

CASE WHEN with NULL Handling

8.Handle NULL values in salary

SELECT Name,

CASE

WHEN Salary IS NULL THEN 'Salary Not Available'

ELSE 'Salary Available'

END AS SalaryStatus

FROM Employees;
9.Replace NULL experience with 'Unknown'

SELECT Name,

COALESCE(CAST(Experience AS VARCHAR), 'Unknown') AS ExperienceDetails

FROM Employees;

Nested CASE WHEN

🔟 Classify employees based on age and experience

SELECT Name, Age, Experience,

CASE

WHEN Age < 3️0 THEN

CASE

WHEN Experience < 5 THEN 'Young & Inexperienced'

ELSE 'Young & Experienced'

END

WHEN Age BETWEEN 3️0 AND 4️5 THEN

CASE

WHEN Experience > 1️0 THEN 'Mid-aged & Expert'

ELSE 'Mid-aged & Developing'

END

ELSE 'Senior'

END AS EmployeeCategory

FROM Employees;

More Advanced Scenarios

1️1️.Determine leave balance category

SELECT Name,
CASE

WHEN Age < 3️0 THEN 'Eligible for Extra Leave'

ELSE 'Standard Leave'

END AS LeaveCategory

FROM Employees;

1️2️.Performance rating based on salary and experience

SELECT Name, Salary, Experience,

CASE

WHEN Salary > 1️00000 AND Experience > 1️0 THEN 'Excellent'

WHEN Salary BETWEEN 7️0000 AND 1️00000 AND Experience BETWEEN 5 AND 1️0
THEN 'Good'

ELSE 'Average'

END AS PerformanceRating

FROM Employees;

More CASE WHEN Scenarios

CASE WHEN with Different Operators

1️3️.Check if employees are in IT or Finance department

SELECT Name, Department,

CASE

WHEN Department IN ('IT', 'Finance') THEN 'Technical'

ELSE 'Non-Technical'

END AS DepartmentType

FROM Employees;

1️4️.Assign bonus based on salary slab


SELECT Name, Salary,

CASE

WHEN Salary > 1️00000 THEN Salary * 0.2️

WHEN Salary BETWEEN 7️0000 AND 1️00000 THEN Salary * 0.1️5

ELSE Salary * 0.1️

END AS Bonus

FROM Employees;

1️5.Check if employee is eligible for overtime pay

SELECT Name,

CASE

WHEN Salary < 60000 THEN 'Eligible for Overtime'

ELSE 'Not Eligible'

END AS OvertimeEligibility

FROM Employees;

CASE WHEN with Multiple Columns

1️6.Determine highest-paid employee in each department

SELECT Name, Department, Salary,

CASE

WHEN Salary = (SELECT MAX(Salary) FROM Employees e2️ WHERE e2️.Department =


e1️.Department)

THEN 'Highest Paid'

ELSE 'Not Highest Paid'

END AS Status

FROM Employees e1️;


1️7️.Calculate tax category based on salary and experience

SELECT Name, Salary, Experience,

CASE

WHEN Salary > 1️00000 AND Experience > 1️0 THEN 'High Tax Bracket'

WHEN Salary BETWEEN 7️0000 AND 1️00000 AND Experience BETWEEN 5 AND 1️0
THEN 'Medium Tax Bracket'

ELSE 'Low Tax Bracket'

END AS TaxCategory

FROM Employees;

1️8.Determine relocation benefits based on experience and salary

SELECT Name, Experience, Salary,

CASE

WHEN Experience > 1️0 OR Salary > 1️2️0000 THEN 'Full Relocation Package'

WHEN Experience BETWEEN 5 AND 1️0 THEN 'Partial Relocation Package'

ELSE 'No Relocation Benefits'

END AS RelocationStatus

FROM Employees;

CASE WHEN with String Functions

1️9.Identify employees with a specific letter in their name

SELECT Name,

CASE

WHEN Name LIKE '%A%' THEN 'Contains A'

ELSE 'Does not contain A'


END AS NameCheck

FROM Employees;

2️0.Determine gender description

SELECT Name, Gender,

CASE

WHEN Gender = 'M' THEN 'Male'

WHEN Gender = 'F' THEN 'Female'

ELSE 'Other'

END AS GenderDescription

FROM Employees;

CASE WHEN with GROUP BY and HAVING

2️1️.Count employees in each experience category

SELECT

CASE

WHEN Experience >= 1️0 THEN 'Senior'

WHEN Experience BETWEEN 5 AND 9 THEN 'Mid-Level'

ELSE 'Junior'

END AS ExperienceCategory,

COUNT(*) AS EmployeeCount

FROM Employees

GROUP BY

CASE

WHEN Experience >= 1️0 THEN 'Senior'

WHEN Experience BETWEEN 5 AND 9 THEN 'Mid-Level'


ELSE 'Junior'

END;

2️2️.Department-wise total salary categorization

SELECT Department, SUM(Salary) AS TotalSalary,

CASE

WHEN SUM(Salary) > 2️50000 THEN 'High Expense'

ELSE 'Low Expense'

END AS ExpenseCategory

FROM Employees

GROUP BY Department;

CASE WHEN with Joins (Advanced)

2️3️.Join employees and departments to classify based on budget

SELECT e.Name, e.Department, d.Budget,

CASE

WHEN d.Budget > 4️00000 THEN 'Rich Department'

WHEN d.Budget BETWEEN 2️00000 AND 4️00000 THEN 'Moderate'

ELSE 'Low Budget'

END AS BudgetCategory

FROM Employees e

JOIN Departments d ON e.Department = d.DeptName;

2️4️.Check if department has a high-paid employee

SELECT e.Department,

CASE
WHEN MAX(e.Salary) > 1️00000 THEN 'Has High Paid Employees'

ELSE 'No High Paid Employees'

END AS HighPaidStatus

FROM Employees e

GROUP BY e.Department;

CASE WHEN with Date Manipulations

2️5.Determine if employees are nearing retirement (age > 55)

SELECT Name, Age,

CASE

WHEN Age > 55 THEN 'Nearing Retirement'

ELSE 'Active'

END AS RetirementStatus

FROM Employees;

2️6.Calculate years of service category

SELECT Name, JoiningDate,

CASE

WHEN YEAR(CURRENT_DATE) - YEAR(JoiningDate) > 1️0 THEN 'Veteran'

WHEN YEAR(CURRENT_DATE) - YEAR(JoiningDate) BETWEEN 5 AND 1️0 THEN


'Experienced'

ELSE 'New'

END AS ServiceCategory

FROM Employees;

CASE WHEN with Subqueries


2️7️.Find employees who earn above department average

SELECT Name, Salary, Department,

CASE

WHEN Salary > (SELECT AVG(Salary) FROM Employees e2️ WHERE e2️.Department =
e1️.Department)

THEN 'Above Average'

ELSE 'Below Average'

END AS SalaryComparison

FROM Employees e1️;

2️8.Identify employees in top 1️0% salary

SELECT Name, Salary,

CASE

WHEN Salary > (SELECT PERCENTILE_CONT(0.9) WITHIN GROUP (ORDER BY


Salary) FROM Employees)

THEN 'Top 1️0% Earner'

ELSE 'Below Top 1️0%'

END AS TopEarnerCategory

FROM Employees;

More Complex Scenarios

2️9.Classify employees into salary percentiles

SELECT Name, Salary,

CASE

WHEN Salary >= (SELECT PERCENTILE_CONT(0.7️5) WITHIN GROUP (ORDER BY


Salary) FROM Employees) THEN 'Top 2️5%'
WHEN Salary >= (SELECT PERCENTILE_CONT(0.50) WITHIN GROUP (ORDER BY
Salary) FROM Employees) THEN 'Top 50%'

ELSE 'Bottom 50%'

END AS SalaryPercentile

FROM Employees;

More Use Cases

3️0.CASE WHEN with RANK() to find salary ranks

SELECT Name, Salary,

RANK() OVER (ORDER BY Salary DESC) AS SalaryRank,

CASE

WHEN RANK() OVER (ORDER BY Salary DESC) = 1️ THEN 'Top Earner'

ELSE 'Not Top Earner'

END AS RankCategory

FROM Employees;

3️1️.Determine Probation Period Status

SELECT Name, JoiningDate,

CASE

WHEN DATEDIFF(CURRENT_DATE, JoiningDate) < 1️80 THEN 'On Probation'

ELSE 'Permanent Employee'

END AS ProbationStatus

FROM Employees;

3️2️.CASE WHEN with DISTINCT Count

SELECT COUNT(DISTINCT Department) AS UniqueDepartments,


CASE

WHEN COUNT(DISTINCT Department) > 3️ THEN 'Diverse Company'

ELSE 'Limited Departments'

END AS DiversityCategory

FROM Employees;

3️3️.Categorize Employees Based on First Letter of Name

SELECT Name,

CASE

WHEN Name LIKE 'A%' THEN 'Starts with A'

WHEN Name LIKE 'B%' THEN 'Starts with B'

ELSE 'Other'

END AS NameCategory

FROM Employees;

3️4️.CASE WHEN with ORDER BY

SELECT Name, Salary, Experience,

CASE

WHEN Experience > 1️0 THEN 'Highly Experienced'

ELSE 'Less Experienced'

END AS ExperienceLevel

FROM Employees

ORDER BY

CASE

WHEN Experience > 1️0 THEN 1️

ELSE 2️
END, Salary DESC;

3️5.CASE WHEN to Group Employees by Even/Odd ID

SELECT Name, EmpID,

CASE

WHEN EmpID % 2️ = 0 THEN 'Even ID'

ELSE 'Odd ID'

END AS IDCategory

FROM Employees;

3️6.Assign Employee Shift Based on Age

SELECT Name, Age,

CASE

WHEN Age < 3️0 THEN 'Morning Shift'

WHEN Age BETWEEN 3️0 AND 4️5 THEN 'Afternoon Shift'

ELSE 'Night Shift'

END AS ShiftCategory

FROM Employees;

3️7️.Assign Work-from-Home Eligibility

SELECT Name, Department, Experience,

CASE

WHEN Department = 'IT' OR Experience > 1️0 THEN 'Eligible for Work from Home'

ELSE 'Office Work Required'

END AS WorkType

FROM Employees;
3️8.Assign Annual Leave Based on Experience

SELECT Name, Experience,

CASE

WHEN Experience >= 1️5 THEN '3️0 Days Leave'

WHEN Experience BETWEEN 1️0 AND 1️4️ THEN '2️5 Days Leave'

WHEN Experience BETWEEN 5 AND 9 THEN '2️0 Days Leave'

ELSE '1️5 Days Leave'

END AS LeaveCategory

FROM Employees;

3️9.Identify Employees Who Have Worked in Multiple Departments

SELECT Name, COUNT(DISTINCT Department) AS DepartmentCount,

CASE

WHEN COUNT(DISTINCT Department) > 1️ THEN 'Multi-Department Employee'

ELSE 'Single-Department Employee'

END AS EmployeeType

FROM Employees

GROUP BY Name;

4️0.Identify Salary Growth Over Time

SELECT e1️.Name, e1️.Salary AS CurrentSalary, e2️.Salary AS PreviousSalary,

CASE

WHEN e1️.Salary > e2️.Salary THEN 'Increased Salary'

WHEN e1️.Salary < e2️.Salary THEN 'Decreased Salary'

ELSE 'No Change'


END AS SalaryTrend

FROM Employees e1️

JOIN Employees e2️ ON e1️.EmpID = e2️.EmpID

WHERE e2️.JoiningDate < e1️.JoiningDate;

4️1️.Determine High-Performing Employees Based on Multiple Criteria

SELECT Name, Salary, Experience,

CASE

WHEN Salary > 90000 AND Experience > 8 THEN 'High Performer'

WHEN Salary > 60000 AND Experience BETWEEN 5 AND 8 THEN 'Medium
Performer'

ELSE 'Low Performer'

END AS PerformanceCategory

FROM Employees;

4️2️.CASE WHEN with UNION

SELECT Name, Salary, 'Above 80K' AS SalaryRange

FROM Employees WHERE Salary > 80000

UNION

SELECT Name, Salary, 'Below 80K'

FROM Employees WHERE Salary <= 80000;

4️3️.Categorize Employees Based on Joining Year

SELECT Name, JoiningDate,

CASE

WHEN YEAR(JoiningDate) >= 2️02️0 THEN 'Recent Joiner'


WHEN YEAR(JoiningDate) BETWEEN 2️01️0 AND 2️01️9 THEN 'Mid-Tenure'

ELSE 'Long-Term Employee'

END AS TenureCategory

FROM Employees;

4️4️.Identify Employees Close to Promotion

SELECT Name, Experience,

CASE

WHEN Experience >= 1️0 THEN 'Eligible for Promotion'

ELSE 'Needs More Experience'

END AS PromotionStatus

FROM Employees;

4️5.Employee Overtime Calculation

SELECT Name, Salary,

CASE

WHEN Salary < 60000 THEN Salary * 0.05

ELSE Salary * 0.02️

END AS OvertimePay

FROM Employees;

4️6.CASE WHEN with Nested IF Conditions

SELECT Name, Age, Salary,

CASE

WHEN Age < 3️0 THEN

CASE
WHEN Salary > 7️0000 THEN 'Young and High Earner'

ELSE 'Young and Average Earner'

END

WHEN Age >= 3️0 AND Age < 50 THEN

CASE

WHEN Salary > 90000 THEN 'Mid-Age and High Earner'

ELSE 'Mid-Age and Average Earner'

END

ELSE 'Senior Employee'

END AS EmployeeCategory

FROM Employees;

4️7️.Identify Employees Who Are Close to Retirement

SELECT Name, Age,

CASE

WHEN Age >= 58 THEN 'Retiring Soon'

ELSE 'Active Employee'

END AS RetirementCategory

FROM Employees;

4️8.Check Work Anniversary Status

SELECT Name, JoiningDate,

CASE

WHEN MONTH(JoiningDate) = MONTH(CURRENT_DATE) THEN 'Anniversary Month'

ELSE 'Regular Month'

END AS AnniversaryStatus
FROM Employees;

4️9.Determine If an Employee is Eligible for Training

SELECT Name, Experience,

CASE

WHEN Experience < 3️ THEN 'Needs Training'

ELSE 'No Training Required'

END AS TrainingStatus

FROM Employees;

50.Assign Performance Levels Using CASE WHEN

SELECT Name, Salary, Experience,

CASE

WHEN Salary > 1️00000 OR Experience > 1️5 THEN 'Top Performer'

WHEN Salary BETWEEN 7️0000 AND 1️00000 OR Experience BETWEEN 7️ AND 1️5
THEN 'Mid Performer'

ELSE 'Needs Improvement'

END AS PerformanceLevel

FROM Employees;

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy