Leetcode 6.22 다시 풀기 180,181,182,183,184 +성능 고민
by daramiSELECT a.num as ConsecutiveNums
FROM
(
SELECT id
,num
,(LEAD(num,1) OVER (ORDER BY id))l
,(LEAD(num,2) OVER (ORDER BY id))m
FROM logs
)a
WHERE a.num=a.l=a.m
mysql로 했을 때는 WHERE a.num=a.l=a.m 이게 되는데 mssql로 하니까 WHERE a.num=a.l=a.m 이게 에러가 난다.
왜 그럴까? 곧 처리하기!
181. Employees Earning More Than Their Managers
SELECT e.name as Employee
FROM Employee e
JOIN Employee e2 ON e.managerid=e2.id
WHERE e.salary > e2.salary
- 오타도 실력이다!
- more than 은 영어에서 초과!
182. Duplicate Emails
SELECT email
FROM Person
GROUP BY email
HAVING COUNT(*)>1
183. Customers Who Never Order
SELECT c.name as Customers
FROM Customers c
LEFT JOIN Orders o ON c.id=o.customerid
WHERE customerid IS NULL
Runtime: 876 ms, faster than 10.91% of MySQL online submissions for Customers Who Never Order.
SELECT name as Customers
FROM Customers
WHERE id NOT IN ( SELECT customerid FROM Orders )
Runtime: 456 ms, faster than 74.53% of MySQL online submissions for Customers Who Never Order.
성능을 높이기 위해 여러가지 방법을 시도해 보고 있는데.. 의문 덩어리가 남았다.
왜 같은 문제, 같은 쿼리인데 성능이 천차만별 인 것일까?
그리고 이 두개는 왜 다른 것일까? ㅎㅎㅎㅎ
그래서 질문을 남겼다.
- 지엽적인 문제일 수 있으니 일단 저장해 놓고 가겠다.
184. Department Highest Salary
SELECT d.name as Department
,e.name as Employee
,e.salary
FROM Employee e
LEFT JOIN Department d ON e.departmentid=d.id
WHERE (e.departmentid,e.salary) IN (
SELECT departmentid
,MAX(salary) as salary
FROM Employee
GROUP BY departmentid
)
- WHERE ( , ) IN ( ) 이 핵심
(다른 풀이)
SELECT D.NAME AS DEPARTMENT,
E.NAME AS EMPLOYEE,
E.SALARY
FROM EMPLOYEE E
JOIN DEPARTMENT D ON
E.DEPARTMENTID = D.ID
WHERE SALARY = (SELECT MAX(SALARY) FROM EMPLOYEE WHERE D.ID = EMPLOYEE.DEPARTMENTID);
이런 방법도 있군! 서브 쿼리에 where 조건을 넣어 주는 것
'SQL > Leetcode' 카테고리의 다른 글
Leetcode 다시풀기 1141 dau (0) | 2022.06.27 |
---|---|
Leetcode 다시풀기 607,627,1084 (0) | 2022.06.24 |
Leetcode 다시 풀기 584, 586 mysql 문제 풀이 (0) | 2022.06.24 |
Leetcode 다시풀기 (hard) 185 , (easy) 196,197 (0) | 2022.06.23 |
6.20 Leetcode 다시풀기 176,178,1050,1068,1069 (0) | 2022.06.19 |
블로그의 정보
다람
darami