모바일은 화면을 돌려 가로화면으로 보시는 게 읽으시기 편할 수 있습니다. 돌려서 보시는 걸 추천드릴게요!!
아직 블로그에 정리하지는 않았지만, 다양한 문제를 해결하면서 사용한 구문들을 기록하려고 합니다!!
이번 포스팅 후에, 풀이한 문제들은 차차 올리도록 하겠습니다🙂.
1. 특정 제품 A, B, C, ... 를 모두 구매한 고객 구하기
- INNER JOIN으로 접근해서, 고객별 구매 제품 취합
2. 특정 제품 리스트의 모든 제품을 구매한 고객 구하기
- 고객별 구매 제품이 제품 리스트에 포함되는지 확인 후, COUNT를 통해 리스트에 있는 제품들을 모두 구매했는지 확인
3. GROUP BY
- 집계 연산 후 NULL을 없애려는 경우, GROUP BY를 사용하면 출력되지 않음.
4. 임시 카테고리 테이블 만들기
SELECT 'CATEGORY_A' AS Category FROM DUAL
UNION ALL
SELECT 'CATEGORY_B' AS Category FROM DUAL
UNION ALL
...
5. 특정 조건문을 통한 데이터 추출
- 이 경우, WHERE 절의 조건으로 인해 쿼리 결과가 변할 수 있음. 서브쿼리로 다시 SELECT 한 뒤에 조건문 사용하기.
- 서브쿼리 사용을 두려워하지 말자!!
6. 누적합 구하기 : WINDOW 함수
- 전체 유저 대상
SELECT SUM(PRICE) OVER(ORDER BY Date) AS cumsum FROM Table
- 개별 유저 대상
SELECT SUM(Price) OVER(PARTITION BY user_id ORDER BY Date) AS cumsum FROM Table
7. 이동평균 구하기 : 7일 기준 (2023-01-01 ~ 2023-01-07)
SELECT
AVG(Price) OVER(ORDER BY Date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS mov_avg
FROM Table
8. 행 삭제하기 : DELETE 사용
DELETE T1 FROM TABLE_1 AS T1, TABLE_2 AS T2
WHERE condition -- given conditions, or identifiable between two tables
9. 그룹별 제품을 이어서 문자열로 추출하기 : GROUP_CONCAT
SELECT Category, GROUP_CONCAT(Member) AS Member
FROM Table
GROUP BY Category
10. 곱집합 추출하기 : CROSS JOIN
- ( Table_A 행 개수 * Table_B 행 개수 ) 만큼의 데이터 추출
- 다른 조인과는 달리, ON 조건이 존재하지 않음
-- 1.
SELECT * FROM Table_A CROSS JOIN Table_B
-- 2.
SELECT * FROM Table_A, Table_B
11. 순위 매기기
- RANK( ) : 동일 값에는 같은 순위를 매기며, 뒷 순위는 건너뛰는 함수 ( 1, 2, 2, 4, 5, 5, 7 ... )
SELECT
RANK() OVER(PARTITION BY ~ ORDER BY ~) AS 'RANK'
FROM Table
- DENSE_RANK( ) : 동일 값에는 같은 순위를 매기며, 뒷 순위가 이어지는 함수 ( 1, 2, 2, 3, 4, 4, 5 ... )
SELECT
DENSE_RANK() OVER(PARTITION BY ~ ORDER BY ~) AS 'RANK'
FROM Table
'🐬 SQL > 🏆 MySQL 문제풀이' 카테고리의 다른 글
🔓 09. LeetCode SQL 50 Easy LEVEL 문제풀이 (2) | 2023.11.26 |
---|---|
🔓 07. VIP 고객 누적 주문 금액 도달 일자 추출 쿼리 (0) | 2023.11.12 |
🔓 06. 프로그래머스 LEVEL4, 5 문제풀이 (0) | 2023.11.11 |
🔓 05. 프로그래머스 LEVEL3 문제풀이 (0) | 2023.10.27 |
🔓 04. 프로그래머스 LEVEL2 문제풀이 (0) | 2023.10.25 |