SQL_Programming_Practice_All_Sets_Combined
SQL_Programming_Practice_All_Sets_Combined
- Primary Key ensures each row is unique and cannot contain NULLs.
- Unique Key also ensures uniqueness but allows a single NULL value.
15. Q15. Get department name for each employee using aliases.
19. Q19. Get all employees whose salary is not among top 3.
Section E: Group By, Having, Case & Window Functions (20 Marks)
21. Q21. Total and average salary per department.
SELECT *, CASE
WHEN Salary >= 90000 THEN 'Excellent'
WHEN Salary >= 70000 THEN 'Good'
ELSE 'Average' END AS Rating
FROM Employees;
FROM Employees;
SELECT * FROM (
SELECT *, ROW_NUMBER() OVER (PARTITION BY CustomerID ORDER BY OrderDate
DESC) AS rn
FROM Orders
) AS sub WHERE rn = 1;
SELECT OrderDate,
Amount,
ROUND(Amount * 100.0 / SUM(Amount) OVER (PARTITION BY OrderDate), 2) AS
PercentContribution
FROM Orders;
Set 3
- CHAR is fixed-length and pads with spaces. VARCHAR is variable-length and stores only
actual characters.
Set 4
SELECT * FROM Employees WHERE Salary > (SELECT AVG(Salary) FROM Employees);
SELECT *, CASE
WHEN DATEDIFF(CURDATE(), JoinDate)/365 > 5 THEN 'Senior'
WHEN DATEDIFF(CURDATE(), JoinDate)/365 > 2 THEN 'Mid'
ELSE 'Junior' END AS ExperienceLevel
FROM Employees;
49. Q19. Find total salary in each department using window function.
SELECT * FROM (
SELECT *, RANK() OVER (PARTITION BY DeptID ORDER BY Salary DESC) AS rk FROM
Employees
) sub WHERE rk <= 2;
Set 5
SELECT DeptID FROM Employees GROUP BY DeptID HAVING MAX(Salary) <= 70000;
SELECT *, CASE
WHEN Salary >= 90000 THEN 'A'
WHEN Salary >= 70000 THEN 'B'
ELSE 'C' END AS Grade FROM Employees;
SELECT * FROM (
SELECT *, ROW_NUMBER() OVER (PARTITION BY DeptID ORDER BY Salary DESC) AS rn
FROM Employees
) AS sub WHERE rn = 1;
60. Q10. List employees who joined in same month as someone else.
SELECT * FROM Employees E1 WHERE EXISTS (
SELECT 1 FROM Employees E2
WHERE MONTH(E1.JoinDate) = MONTH(E2.JoinDate) AND E1.EmpID <> E2.EmpID
);
Set 6
WITH DeptAvg AS (
SELECT DeptID, AVG(Salary) AS AvgSal FROM Employees GROUP BY DeptID
)
SELECT E.* FROM Employees E
JOIN DeptAvg D ON E.DeptID = D.DeptID
WHERE E.Salary > D.AvgSal;
SELECT * FROM (
SELECT *, RANK() OVER (PARTITION BY DeptID ORDER BY JoinDate DESC) AS rk FROM
Employees
) AS sub
WHERE DeptID = (SELECT DeptID FROM Departments WHERE DeptName = 'IT') AND rk <=
3;
67. Q17. Detect customers who placed orders every month this year.
-- Original:
SELECT * FROM Employees WHERE DeptID IN (SELECT DeptID FROM Departments WHERE
Location = 'Delhi');
-- Optimized:
SELECT E.* FROM Employees E JOIN Departments D ON E.DeptID = D.DeptID WHERE
D.Location = 'Delhi';
72. Q2. A manager wants to identify employees who haven't taken any leaves in the current
calendar year.
73. Q3. The finance team wants to audit all customers who have made purchases over 1
lakh across any month in 2024.
74. Q4. Identify employees who have changed departments more than twice in the past
year.
78. Q8. Fix this query to return department-wise second highest salary:
SELECT MAX(Salary) FROM Employees WHERE Salary < MAX(Salary) GROUP BY
DeptID;
80. Q10. The following query gives NULL for all rankings. Identify the problem:
SELECT FirstName, RANK() OVER (ORDER Salary DESC) AS Rank FROM Employees;