tak's data blog

LeetCode 문제풀이 (176, 178, 180, 181, 182, 183) 본문

SQL

LeetCode 문제풀이 (176, 178, 180, 181, 182, 183)

hyuntaek 2022. 6. 24. 00:04

 

리트코드 SQL문제는 단계별로 주어진 날짜에 따라 정해진 문제를 푸는 형식이 있고,

결제없이 무료로 제공되는 문제들이 있다! 예전에도 풀어보았지만 반복적으로 학습해야 순간적인 상황에 대처할 수 있으므로 복습을 해보겠다!

 

 

 

#176

SELECT max(salary) as 'SecondHighestSalary'
FROM  Employee
WHERE salary != (SELECT max(salary)
                 FROM Employee) 
# != 말고도 not in 등으로 대체가 가능하다!

 

 

 

#178

Select score,
       Dense_rank() Over (Order By Score Desc) `Rank`
From Scores

# Dense_rank () 뒤에 항상 over를 빼먹는다 실수를 줄여야지

 

 

 

#180

SELECT DISTINCT L1.NUM as 'ConsecutiveNums'
FROM Logs L1,
     Logs L2,
     Logs L3
WHERE L1.Id = L2.Id - 1    
AND   L2.Id = L3.Id - 1
AND   L1.Num = L2.Num
AND   L2.Num = L3.Num

# 같은 테이블을 3개 생성해서 where 조건으로 줄 수 있다는 생각을 못했다. 솔루션을 보고 알게 되었다.

 

 

 

#181

SELECT e1.name as 'Employee'
FROM Employee e1 inner join Employee e2
     on e1.managerId = e2.id
WHERE e1.salary > e2.salary

 

 

 

#182

SELECT email as 'Email'
FROM Person
GROUP BY email
HAVING count(email) >= 2

# distinct로 중복을 제거할 수 있지만, 집계 함수로 2개 이상인 raw를 뽑아내 해결하였다.

 

 

 

#183

SELECT name as 'Customers'
FROM Customers
WHERE name not in (SELECT c.name 
                   FROM Customers c inner join Orders o
                   on c.id = o.customerId)
                   
# 내 풀이는 이러하지만 ()괄호 안에 두개의 테이블 조인이 아니라 orders 테이블 하나만으로도 풀이가 가능하다.

 

 

 

이거면 됐다!라는 안일한 생각이 제일 좋지 않은 것 같다. 이 생각하나로 제대로 공부를 하지 못하여서 상반기에 꿈의 그리던 기업에 기회를 날렸던 것을 생각하면 아직도 후회가 있다. 하지만 후회해서 변하는건 없으니 여러 사이트의 문제를 풀어보면서 내것으로 만들어야겠다!!

'SQL' 카테고리의 다른 글

LeetCode 문제풀이 (262)  (0) 2022.06.26
LeetCode 문제풀이 (184, 185)  (0) 2022.06.26
[SQL] HackerRank - Ollivander's Inventory  (0) 2022.06.05
[SQL] HackerRank - New Companies  (0) 2022.04.03
[SQL] HackerRank - Challenges  (0) 2022.03.17