본문 바로가기
Data Analysis/SQL Pandas

[MySQL] Example

by 베짱이28호 2024. 8. 29.

MySQL

LeetCode, Project 등 진행하면서 모르는 것들, 헷갈리는 것들, 유용한 팁 정리


1. LEAD, LAG

Rising Temperature - LeetCode

SELECT ID
FROM (
    SELECT *,
        DATEDIFF(RECORDDATE, LAG(RECORDDATE) OVER (ORDER BY RECORDDATE)) AS DATEDIFF,
        TEMPERATURE - LAG(TEMPERATURE) OVER (ORDER BY RECORDDATE) AS DAYDIFF
    FROM WEATHER
    ORDER BY RECORDDATE
) AS TEMP
WHERE DATEDIFF = 1 AND DAYDIFF > 0
  • 윈도우 함수 LEAD, LAG. 이전 값이나 이후 값을 가져올 때 유용하다.
  • 이전 값과 비교를 해서 연산이 필요한 경우 자주 사용.

2. IF

SELECT *,IF(X+Y>Z AND Y+Z>X AND Z+X>Y, "Yes", "No") AS TRIANGLE
FROM TRIANGLE

SELECT *,IF(X+Y<=Z OR Y+Z<=X OR Z+X<=Y, "No", "Yes") AS TRIANGLE
FROM TRIANGLE
  • 어려운 내용은 아니지만, 간단한 binary 구분의 경우에는 IF를 쓰자.
  • 아닌 경우에는 CASE WHEN 구문을 사용하기.
  • 마찬가지로 AND, OR 조건에서 최대한 뒤의 조건까지 안지나가게 AND OR를 반대로 설정하는 것도 고려하기.

3. DATE_ADD, DATE_SUB

User Activity for the Past 30 Days I - LeetCode

SELECT ACTIVITY_DATE AS DAY, COUNT(DISTINCT USER_ID) AS ACTIVE_USERS
FROM ACTIVITY
WHERE ACTIVITY_DATE BETWEEN DATE_SUB('2019-07-27', INTERVAL 29 DAY) AND '2019-07-27'
GROUP BY ACTIVITY_DATE
  • 날짜 계산 함수 DATE_ADD/SUB
  • DATE_ADD/SUB(현재날짜, INVERVAL 날짜 기준)로 값을 더하거나 빼기

댓글