Syeonny의 블로그

[SQL] 고급 함수 본문

SQL

[SQL] 고급 함수

syeonny 2025. 4. 5. 02:00

MySQL기준

 

WINDOW FUNCTION 

 

행 간의 비교 및 순위, 누적합 등등을 계산할 때 사용함

 

함수 OVER (PARTITON BY / ORDER BY) 와 함께 사용됨

 

 

  1. ROW_NUMBER() 그룹 내 순번  
  2. RANK() 동일 순위 허용, 순위 건너뜀 1 1 3 
  3. DENSE_RANK() 동일 순위 허용, 순위 건너뛰지 않음 1 1 2  
  4. LAG(col, n) 현재 행 기준 n행 전의 값 반환
  5. LEAD(col, n) 현재 행 기준 n행 후의 값 반환 
  6. SUM(col) OVER() 누적합 계산

 

주문 테이블에서 유저 아이디 별 최근 주문 내역을 조회

SELECT user_id, order_id, 
  ROW_NUMBER() OVER(PARTITION BY user_id ORDER BY order_date DESC) AS rn
FROM orders;

 

 

 

 

CASE WHEN 

 

조건에 따라 값을 처리함 (PYTHON 의 IF 기능)

 

학생 테이블에서 점수가 90인 학생 A 80인 학생 B 나머지 C 인 새로운 열을 만들어서 학생의 이름과 같이 출력

SELECT NAME.
	CASE 
		WHEN SCORE>=90 THEN 'A'
    	WHEN SCORE>=80 THEN 'B'
   		ELSE 'C'
	END AS GRADE
FROM STUDENTS;

 

 

 

NULL

 

값이 없음, 비교 연산자로 비교 불가능함

 

IS NULL 값이 없음 

IS NOT NULL 값이 있음

 

IFNULL(col, 대체 값) col이 NULL이면 대체 값 사용

COALESE(col1, col2, ,,, 기본 값) NULL이 아닌 첫 번째 값 반환

 

col이 NULL값을 가지면 0으로 대체

SELECT IFNULL(col, 0)

 

여러 후보 중 첫 NULL이 아닌 값 반환

SELECT COALESCE(col1, col2, 0)

 

 

 

LIMIT & OFFSET

 

결과 집합에서 일부만 조회하거나 페이징할 때 사용

LIMIT 몇 개를 가져올 지, OFFSET 건너뛸 행의 수 

 

주문 테이블에서 주문 순으로 내림차순하고(최신), 10개를 건너뛰어서 11~20개를 가져오기

SELECT *
FROM ORDERS
ORDER BY ORDER_DATE DESC
LIMIT 10 OFFSET 10;

'SQL' 카테고리의 다른 글

SQL 내장 함수  (0) 2024.12.05
SQL 데이터 집계, 순위, 조인, 뷰  (0) 2024.12.05
SQL if문, case문, 테이블 다루기  (0) 2024.12.03
SQL 데이터 베이스 모델링  (0) 2024.12.03
SQL 조회, 조건  (0) 2024.12.03