MySQL
LeetCode, Project 등 진행하면서 모르는 것들, 헷갈리는 것들, 유용한 팁 정리
1. LEAD, LAG
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 날짜 기준)로 값을 더하거나 빼기
'Data Analysis > SQL Pandas' 카테고리의 다른 글
leetcode : 1633. Percentage of Users Attended a Contest (0) | 2025.02.04 |
---|---|
leetcode : 1587. Bank Account Summary II (0) | 2025.02.04 |
leetcode : 1581. Customer Who Visited but Did Not Make Any Transactions (0) | 2025.02.03 |
[Pandas/MySQL] Active User (0) | 2024.11.14 |
[Pandas/MySQL] Rank (0) | 2024.11.12 |
[Pandas] Example (0) | 2024.08.29 |
[Pandas] Query Reference (0) | 2024.08.29 |
댓글