https://school.programmers.co.kr/learn/courses/30/parts/17042
GROUP BY
- SELECT 문에 있는 모든 열은 집계 함수가 되거나 GROUP BY절에 나타나야 함
NTILE & CASE
https://school.programmers.co.kr/learn/courses/30/lessons/301649?language=mysql
SELECT ID,
CASE
WHEN NR = '1' THEN 'CRITICAL'
WHEN NR = '2' THEN 'HIGH'
WHEN NR = '3' THEN 'MEDIUM'
WHEN NR = '4' THEN 'LOW'
END AS COLONY_NAME
FROM (
SELECT ID, NTILE(4) OVER (
ORDER BY SIZE_OF_COLONY DESC) AS NR
FROM ECOLI_DATA) AS t
ORDER BY ID;
- CASE
- CASE - END AS {컬럼명}
- WHEN - THEN
- NTILE
- NTILE({나눌 단위}) OVER (ORDER BY {정렬 기준 컬럼})
WITH
https://school.programmers.co.kr/learn/courses/30/lessons/301649?language=mysql
WITH LANKING AS (
SELECT NTILE(4)
OVER (ORDER BY SIZE_OF_COLONY DESC)
AS LANK, ID
FROM ECOLI_DATA)
SELECT ID,
(CASE
WHEN LANK = 1 THEN 'CRITICAL'
WHEN LANK = 2 THEN 'HIGH'
WHEN LANK = 3 THEN 'MEDIUM'
ELSE 'LOW'
END
) AS COLONY_NAME
FROM LANKING
ORDER BY ID
- 서브쿼리를 저장해 테이블처럼 사용할 수 있다. 반복이나 재귀 등에 사용할 수 있다.
- 여러 서브쿼리를 저장할 때에는 WITH을 여러개 작성하는 것이 아니라 컴마로 구분하여 작성한다.
- WITH A AS ( ...) , B AS ( ...)
IFNULL/LEFT OUTER JOIN
https://school.programmers.co.kr/learn/courses/30/lessons/299305?language=mysql
WITH CC AS (
SELECT PARENT_ID, COUNT(*) AS CHILD_COUNT
FROM ECOLI_DATA
WHERE
PARENT_ID IS NOT NULL
GROUP BY PARENT_ID)
SELECT A.ID, IFNULL(CC.CHILD_COUNT, 0) AS CHILD_COUNT
FROM ECOLI_DATA AS A
LEFT JOIN CC
ON A.ID = CC.PARENT_ID
- LEFT JOIN
- 왼쪽(A) 컬럼의 모든 정보를 포함시킨다. 매칭되지 않으면 NULL값이 채워진다.
- IFNULL
- IFNULL({컬럼명}, {NULL을 치환할 값})
UNION(합집합)
https://school.programmers.co.kr/learn/courses/30/lessons/131537?language=mysql
SELECT A.SALES_DATE, A.PRODUCT_ID, A.USER_ID, A.SALES_AMOUNT
FROM (
SELECT DATE_FORMAT(SALES_DATE, '%Y-%m-%d') AS SALES_DATE, PRODUCT_ID, USER_ID, SALES_AMOUNT
FROM ONLINE_SALE
UNION
SELECT DATE_FORMAT(SALES_DATE, '%Y-%m-%d') AS SALES_DATE, PRODUCT_ID, NULL AS USER_ID, SALES_AMOUNT
FROM OFFLINE_SALE) AS A
WHERE
YEAR(SALES_DATE) = '2022'
AND
MONTH(SALES_DATE) = '3'
ORDER BY SALES_DATE, PRODUCT_ID, USER_ID
- UNION은 중복을 제거해 병합, UNION ALL은 중복을 포함해 병합한다.
- {테이블 1} UNION {테이블 2} AS {별칭}
- NULL AS/0 AS
- 테이블 1에만 존재하고 테이블 2에는 존재하지 않는 컬럼일 때 NULL AS {컬럼명}으로 합집합이 가능하다.
- 컬럼 순서를 맞춰 NULL AS {컬럼명} 대신 NULL만 작성해도 똑같이 동작한다.
INTEREECT(교집합)
- 두 테이블 모두에 포함된 행을 검색한다.
MINUS(차집합)
- 첫 번째 테이블에서 두 번째 테이블의 행을 제거한 행을 검색한다.
'복기' 카테고리의 다른 글
[SQL] LEETCODE SQL 50 문제풀이 (0) | 2025.03.06 |
---|---|
[SQL] 프로그래머스 고득점 Kit GROUP BY (0) | 2025.02.17 |
[모의고사] 구현 1회차 복기 (0) | 2025.02.04 |
[모의고사] DP 1회차 복기 (0) | 2025.02.04 |