SQL

SQL 함수

봄다온 2025. 1. 17. 22:27

조건문 함수

# 조건문1 판별 tureㅡ> 결과문1 end
# 조건물1 판별 falseㅡ> 조건문2 true ㅡ> 결과문2 end
# 조건물1 판별 falseㅡ> 조건문2 false ㅡ> 결과문3 end
  CASE
    WHEN <조건문1> THEN <결과문1>
    WHEN <조건문2> THEN <결과문2>
    ELSE <결과문3>
  END

COALESCE 함수

데이터 조회시 NULL값을 다른 기본값으로 대체할때 자주사용.

# map함수처럼 인자들을 반복하며 null값인지 조회하고 null값이 아닌값이 나오면 해당값을 리턴.각 매개변수들의 타입은 같아야함
SELECT COALESCE(null, null, null, '빈 값') as column1;
   column1
---------
 빈 값
(1 row)

단 여기서 COALESCE의 인자로 특정값이 아닌 컬럼을 넣는다면 해당 컬럼의 모든 값을 
조회후 모든 null값을 그 뒤에 지정한 값으로 대체한다.
select * from student_score;
 id |   name    | score
----+-----------+-------
  1 | Heewon    |    87
  2 | Gahye     |    64
  3 | Sabin     |    90
  4 | Deoksun   |   100
  5 | Yejin     |    75
  6 | Gyungsook |    95
  7 | Jinah     |    81
  8 | Jaejung   |    78
  9 | Jiyul     |    61
 10 | Youjun    |
 11 | Minjoo    |

select id, name, coalesce (score,0) as score,
  case
    when score between 90 and 100 then 'A'
    when score between 80 and 89 then 'B'
    when score between 70 and 79 then 'C'
    when coalesce (score, 0) < 70 then 'F'
  end grade
from student_score;
 id |   name    | score | grade
----+-----------+-------+-------
  1 | Heewon    |    87 | B
  2 | Gahye     |    64 | F
  3 | Sabin     |    90 | A
  4 | Deoksun   |   100 | A
  5 | Yejin     |    75 | C
  6 | Gyungsook |    95 | A
  7 | Jinah     |    81 | B
  8 | Jaejung   |    78 | C
  9 | Jiyul     |    61 | F
 10 | Youjun    |     0 | F
 11 | Minjoo    |     0 | F

컬럼명과 case조건문 두곳 모두에서 coalesce함수를 써야 제대로 동작하는것 같다.

NULLIF 함수

# <매개변수1>과 <매개변수2>가 같다면 NULL반환, 다르면 <매개변수1>반환
NULLIF (<매개변수1>,<매개변수2>)

# nullif 사용하여 students 항목중 0이 있을경우 해당 항목에 null반환
# coalesce함수는 매개변수의 타입이 같아야 비교할수 있으므로 ::char로 형변환
# coalesce 함수가 동작하여 나눌수 없는 항목엔 null이 '나눌 수 없음'으로 대체됨.
coalesce(nullif(students, 0)::char, '나눌 수 없음')

배열 함수

#배열의 뒤에 추가
array_append(<배열>, <원소>);
select array_append(array[1,2], 3) as result; ㅡ>  {1,2,3}

#배열의 앞에 추가
array_append(<원소>, <배열>);
select array_prepend(1,array[2,3]) as result; ㅡ>  {1,2,3}

#배열 원소 제거
array_remove(<배열>, <원소>);
select array_remove(array[1,2,3,4],2) as results; ㅡ> {1,3,4}

#배열 원소 변경
array_replace(<배열>, <원소1>, <원소2>)
select array_replace(array[1, 4, 3], 4, 7777) as result; ㅡ>  {1,7777,3}

#배열 병합
array_cat(<배열1>, <배열2>)
select array_cat(array[1,7], array[4,9]) as result; ㅡ>  {1,7,4,9}

'SQL' 카테고리의 다른 글

SQL 연산자  (0) 2025.01.17
SQL 칼럼 값 제한(제약조건)  (0) 2025.01.17
SQL CAST 연산자, CAST 형 연산자  (0) 2025.01.17
SQL 데이터타입  (1) 2025.01.17
SQL DELETE  (0) 2025.01.16