오늘로 꽉 채운 한 달을 데이터 분석 공부에 투자했다. 주차로는 벌써 7주차라는 게 실감이 안 나지만...
학습 내용
나는 어렵게 풀었는데 다른 사람들은 엄청 쉽게 풀었던 문제 기록(SQL)
문제 : 리트코드_두 번째로 높은 급여
SQL 라이브 강의 때 과제 쿼리도 그렇고, 다른 사람들 답을 보면 간결하게 작성하는데 내 쿼리는 늘 구구절절문이라 남기는 기록.
최종적으로 풀이한 쿼리도 짧아진 편인데, 내가 열 몇 줄로 코딩한 걸 다른 사람들은 세 줄로 끝내서 살짝 충격이었다.
SQL # 내가 작성한 쿼리 SELECT IFNULL(MAX(salary),NULL) AS SecondHighestSalary FROM ( SELECT CASE WHEN 2 = DENSE_RANK() OVER(ORDER BY salary DESC) -- RANK() 로 구했더니 공동 1등 다음 2등 없이 3등이 오는 문제 발생 THEN salary ELSE NULL END AS salary FROM Employee ) AS es
OFFSET : LIMIT 다음에 쓴다. LIMIT가 출력할 행의 개수를 제한한다면, OFFSET은 몇 번째 위치부터 행을 출력할 지 나타낸다.
LIMIT 10 OFFSET 5 : 5번째 행부터 10개 행을 출력한다. 제일 첫 번째 행은 OFFSET 0 이므로, 여섯 번째 행 ~ 열다섯 번째 행 출력
LIMIT 1 OFFSET 1 : 따라서, 아래 쿼리문에서 이렇게 쓰면 두 번째 행에서 시작해서 한 개의 행만 출력한다.
SQL # LIMIT 절에 OFFSET을 활용하는 답 SELECT ( SELECT DISTINCT salary FROM employee ORDER BY salary DESC LIMIT 1 OFFSET 1) AS SecondHighestSalary
WHERE 절에 MAX값을 제외하라는 조건을 거는 것
- OFFSET은 정말 몰라서 활용을 못 했다면, 아래 쿼리는 왜 이렇게 생각하지 못했을까 하고 스스로를 반성하게 됐다.
- max값을 구하되, 가장 높은 salary 값을 제외하고 max 값을 구한다면 당연히 두 번째로 높은 salary 값을 출력한다.
- 물론 아래 쿼리를 사용하면 조건이 달라진다면(세 번째로 높은, 네 번째로 높은 salary를 구한다면?) 조금 제약이 있겠지만
그래도 나한테는 충격적인 쿼리문이었다.SQL SELECT max(salary) AS SecondHighestSalary FROM Employee WHERE Salary != (SELECT max(salary) FROM Employee)
CASE WHEN 구문 쓸 때 쿼리문 다듬기(SQL)
지난 주 화요일 SQL 세션에서 튜터님께서 쿼리 스타일 가이드에 대해 소개해주셨다.
그 이후로 쿼리를 작성할 때 가능한 보기 좋게 작성하려고 노력하는 중이다.
예약어는 대문자로 쓰고, alias 앞에AS
를 쓰고. 서브쿼리는 들여쓰기 간격을 맞추고 이런 자잘한 습관을 들이고 있다.과제 풀이를 하다가 CASE WHEN 문을 좀 많이 썼는데, 깔끔하게 쓰는 방법이 뭘까 싶어서 검색해보았다. SQL 스타일 가이드
SQL CASE WHEN column_1 = 1 THEN 'small' WHEN column_1 = 2 THEN 'medium' ELSE 'large' END AS column_name -- note_ 위와 같이 작성해도 좋지만, 아래와 같이 CASE ~ WHEN 사이에 조건을 명시하여 더 간결하게 작성 가능하다. CASE column_1 WHEN 1 THEN 'small' WHEN 2 THEN 'medium' ELSE 'large' END AS column_name
고찰 & 기타
- SQL은 그래도 어느 정도 잘 사용할 수 있다고 생각했는데, 막상 과제를 받아서(퍼널 분석을 과제로 연습하고 있다) 풀어보려고 하니까 잘 안 써졌다. 내일까지 과제를 써야 하는데 걱정이다. 파이썬은 SQL 보다 부족한 것 같은데, 앞으로 얼마나 시간을 더 들여서 공부해야 할지, 사실 가늠이 잘 안 된다.
- 쿼리나 코드를 작성할 때 예기치 않게 글쓰기 습관이 튀어나오는 것 같다.
평소에 글을 쓸 때도 수식어를 많이 쓴다거나, 문장이 하염없이 길어진다 같은 특징이 있는데 이게 내 쿼리에도 묻어 나오는 듯 하다.
하지만 나의 목표는 언제나 "pythonic 한 코드/쿼리 작성하기" 이므로,
간결하고 직관적인 코드/쿼리를 작성할 수 있도록 스타일을 개선해야 겠다. - 약한 감기 몸살로 컨디션이 좋지 않았는데 오랜만에 밖에 나가서 점심 먹고 카페 가서 공부하니 조금 환기가 되었는지 컨디션이 돌아왔다.
- 밀린 TIL, WIL 빨리 채우고, 앞으로는 밀리지 않아야겠다. 아자!
'내일배움캠프_데이터분석_2기 > TIL' 카테고리의 다른 글
[TIL] camp_day33_240531 (1) | 2024.06.03 |
---|---|
[TIL] camp_day32_240530 (0) | 2024.05.30 |
[TIL] camp_day30_240528 (0) | 2024.05.28 |
[TIL] camp_day29_240527 (0) | 2024.05.28 |
[TIL] camp_day28_240524 (0) | 2024.05.24 |