🐬 SQL/🏆 MySQL 문제풀이

🔓 08. 주요 구문 / 함수 정리

nyamin9 2023. 11. 20. 04:11

 

모바일은 화면을 돌려 가로화면으로 보시는 게 읽으시기 편할 수 있습니다. 돌려서 보시는 걸 추천드릴게요!!

 

 

아직 블로그에 정리하지는 않았지만, 다양한 문제를 해결하면서 사용한 구문들을 기록하려고 합니다!!

이번 포스팅 후에, 풀이한 문제들은 차차 올리도록 하겠습니다🙂.

 


 

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