SQL LeetCode Problems with Optimized Solutions
1. Combine Two Tables
Normal Approach:
SELECT [Link], [Link], [Link], [Link]
FROM Person p
LEFT JOIN Address a ON [Link] = [Link];
Optimized Approach:
SELECT [Link], [Link], COALESCE([Link], 'N/A') AS City, COALESCE([Link], 'N/A')
AS State
FROM Person p
LEFT JOIN Address a ON [Link] = [Link];
2. Second Highest Salary
Normal Approach:
SELECT DISTINCT Salary FROM Employee
ORDER BY Salary DESC LIMIT 1 OFFSET 1;
Optimized Approach:
SELECT MAX(Salary) AS SecondHighestSalary FROM Employee
WHERE Salary < (SELECT MAX(Salary) FROM Employee);
3. Nth Highest Salary
Normal Approach:
SELECT DISTINCT Salary FROM Employee
ORDER BY Salary DESC LIMIT 1 OFFSET N-1;
Optimized Approach:
SELECT Salary FROM (
SELECT Salary, DENSE_RANK() OVER (ORDER BY Salary DESC) AS Rank
FROM Employee
) tmp WHERE Rank = N;
4. Rank Scores
Normal Approach:
-- Manual increment of rank (not efficient)
Optimized Approach:
SELECT Score, DENSE_RANK() OVER (ORDER BY Score DESC) AS Rank FROM Scores;
5. Consecutive Numbers
Normal Approach:
SELECT DISTINCT [Link] FROM Logs L1, Logs L2, Logs L3
WHERE [Link] = [Link] - 1 AND [Link] = [Link] - 1
AND [Link] = [Link] AND [Link] = [Link];
Optimized Approach:
SELECT DISTINCT Num FROM (
SELECT Num, LAG(Num,1) OVER (ORDER BY Id) AS prev1,
LAG(Num,2) OVER (ORDER BY Id) AS prev2
FROM Logs
) tmp WHERE Num = prev1 AND Num = prev2;