Skip to content

Commit 1b02467

Browse files
author
Dominik Schauer
committed
Solutions to super hard LeetCode Database questions (all free ones)
1 parent 4c528e6 commit 1b02467

20 files changed

+257
-0
lines changed
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/*Pivot solution
2+
3+
SELECT
4+
id,
5+
Jan AS Jan_Revenue,
6+
Feb AS Feb_Revenue,
7+
Mar AS Mar_Revenue,
8+
Apr AS Apr_Revenue,
9+
May AS May_Revenue,
10+
Jun AS Jun_Revenue,
11+
Jul AS Jul_Revenue,
12+
Aug AS Aug_Revenue,
13+
Sep AS Sep_Revenue,
14+
Oct AS Oct_Revenue,
15+
Nov AS Nov_Revenue,
16+
Dec AS Dec_Revenue
17+
FROM department
18+
PIVOT
19+
(
20+
SUM(revenue)
21+
FOR month
22+
IN ([Jan],[Feb],[Mar],[Apr],[May],[Jun],[Jul],[Aug],[Sep],[Oct],[Nov],[Dec])
23+
)
24+
as pivot*/
25+
26+
SELECT
27+
id,
28+
SUM(CASE WHEN month = 'Jan' THEN revenue END) AS Jan_Revenue,
29+
SUM(CASE WHEN month = 'Feb' THEN revenue END) AS Feb_Revenue,
30+
SUM(CASE WHEN month = 'Mar' THEN revenue END) AS Mar_Revenue,
31+
SUM(CASE WHEN month = 'Apr' THEN revenue END) AS Apr_Revenue,
32+
SUM(CASE WHEN month = 'May' THEN revenue END) AS May_Revenue,
33+
SUM(CASE WHEN month = 'Jun' THEN revenue END) AS Jun_Revenue,
34+
SUM(CASE WHEN month = 'Jul' THEN revenue END) AS Jul_Revenue,
35+
SUM(CASE WHEN month = 'Aug' THEN revenue END) AS Aug_Revenue,
36+
SUM(CASE WHEN month = 'Sep' THEN revenue END) AS Sep_Revenue,
37+
SUM(CASE WHEN month = 'Oct' THEN revenue END) AS Oct_Revenue,
38+
SUM(CASE WHEN month = 'Nov' THEN revenue END) AS Nov_Revenue,
39+
SUM(CASE WHEN month = 'Dec' THEN revenue END) AS Dec_Revenue
40+
FROM department
41+
GROUP BY id

database/175_Combine_Two_Tables.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
SELECT FirstName, LastName, City, State
2+
FROM person AS p
3+
LEFT JOIN address AS a
4+
ON p.personId = a.personId
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
WITH
2+
ranks AS
3+
(SELECT
4+
Salary,
5+
RANK() OVER (ORDER BY Salary DESC) as rank
6+
FROM Employee),
7+
result AS
8+
(SELECT Salary AS SecondHighestSalary
9+
FROM ranks
10+
WHERE rank = 2)
11+
SELECT ISNULL(
12+
(SELECT TOP 1 SecondHighestSalary FROM result),
13+
NULL) AS SecondHighestSalary

database/177_Nth_Highest_Salary.txt

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
CREATE FUNCTION getNthHighestSalary(@N INT) RETURNS INT AS
2+
BEGIN
3+
DECLARE @res INT;
4+
5+
WITH
6+
ranks AS
7+
(SELECT
8+
Salary,
9+
DENSE_RANK() OVER (ORDER BY Salary DESC) as rank
10+
FROM Employee),
11+
result AS
12+
(SELECT Salary AS SecondHighestSalary
13+
FROM ranks
14+
WHERE rank = @N)
15+
SELECT @res = (SELECT ISNULL(
16+
(SELECT TOP 1 SecondHighestSalary FROM result),
17+
NULL) AS SecondHighestSalary);
18+
19+
RETURN(@res);
20+
END

database/178_Rank_Scores.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
SELECT
2+
score,
3+
DENSE_RANK() OVER (ORDER BY score DESC) as rank
4+
FROM scores

database/180_Consecutive_Numbers.txt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
WITH
2+
LogsOrdered AS
3+
(SELECT
4+
Num,
5+
LAG(Num,1) OVER (ORDER BY Id) AS NumLag1,
6+
LAG(Num,2) OVER (ORDER BY Id) AS NumLag2
7+
FROM Logs)
8+
SELECT DISTINCT Num AS ConsecutiveNums
9+
FROM LogsOrdered
10+
WHERE
11+
Num = NumLag1
12+
AND Num = NumLag2
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
SELECT e.Name AS Employee
2+
FROM Employee AS e
3+
LEFT JOIN Employee AS m
4+
ON e.ManagerId = m.Id
5+
WHERE
6+
e.Salary > m.Salary

database/182_Duplicate_Emails.txt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
WITH
2+
counts AS
3+
(SELECT
4+
Email,
5+
COUNT(*) AS cnt
6+
FROM Person
7+
GROUP BY Email)
8+
SELECT Email
9+
FROM counts
10+
WHERE cnt >= 2
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
WITH customerIds AS
2+
(SELECT DISTINCT c.ID
3+
FROM Customers AS c
4+
LEFT JOIN Orders AS o
5+
ON c.Id = o.CustomerId
6+
WHERE
7+
o.Id IS NULL)
8+
SELECT Name AS Customers
9+
FROM Customers
10+
WHERE Id IN (SELECT Id From customerIds)
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
WITH
2+
ranks AS(
3+
SELECT
4+
d.Name AS Department,
5+
e.Name AS Employee,
6+
e.Salary AS Salary,
7+
RANK() OVER (PARTITION BY d.Id ORDER BY e.Salary DESC) AS rank
8+
FROM Employee AS e
9+
LEFT JOIN Department AS d
10+
ON e.DepartmentId = d.Id)
11+
SELECT
12+
Department,
13+
Employee,
14+
Salary
15+
FROM ranks
16+
WHERE
17+
rank = 1
18+
AND Department IS NOT NULL

0 commit comments

Comments
 (0)