함께하는 데이터 분석

[SQL] 단일 행 함수 본문

데이터분석 공부/SQL

[SQL] 단일 행 함수

JEONGHEON 2022. 4. 30. 20:50

오늘은 SQL을 통해

 

단일 행 함수에 대해 알아보겠습니다.

 

단일 행 함수는 숫자형, 문자형, 날짜형, 형 변환, 일반 함수로 나뉩니다.

 

표로 요약하여 보여드리겠습니다.

 

구분 함수 설명
숫자형 함수 abs(숫자) 절댓값 반환
round(숫자, n) 소수점 n자리까지 반올림
sqrt(숫자) 양의 제곱근 값 반환
문자형 함수 lower(문자) / upper(문자) 소문자 / 대문자 반환
left(문자, n) / right(문자, n) 왼쪽 / 오른쪽 n만큼 반환
length(문자) 문자수 반환
날짜형 함수 year / month / day 연 / 월 / 일 반환
date_add(날짜, interval) 날짜에 interval만큼 반환
datediff(날짜a, 날짜b) 날짜a - 날짜b 일수 반환
형변환 함수 date_format(날짜, 형식) 날짜 형식으로 반환
cast(형식a, 형식b) 형식a를 형식b로 반환
일반 함수 ifnull(a, b) a가 null이면 b를 반환 null이 아니면 a반환
case when [조건] then [반환]
else [나머지] end
조건을 걸어 반환값 지정

그럼 이제 SQL workbench를 통해 실습해보겠습니다.

 

 

 

숫자형 함수

/* abs : 절댓값 */
select abs(-124);

abs는 absolute의 약자로 절댓값을 반환해줍니다.

 

따라서 -124를 넣었을 때 124로 반환해준 것을 확인할 수 있습니다.

 

/* round : 반올림 */
select round(3.141592, 4);

3.141592는 파이값입니다.

 

round(숫자, 4)를 입력하면 숫자를 소수 넷째 자리까지 표현하므로

 

소수 다섯째 자리에서 반올림한 결과입니다.

 

/* sqrt : 제곱근 값 */
select sqrt(144);

sqrt는 square root의 약자로 양의 제곱근 값을 반환해줍니다.

 

12의 제곱이 144이므로 144의 양의 제곱근은 12입니다.

 

여기까지 간단한 숫자형 함수를 살펴봤습니다.

 

이제 문자형 함수를 살펴보겠습니다.

 

 

 

문자형 변수

/* lower / upper : 소문자 / 대문자 */
select lower('FLOWER');
select upper('flower');

lower 함수를 이용하여 flower를 FLOWER로 바꿔주었고

 

upper 함수를 이용하여 FLOWER를 flower로 변환해주었습니다.

 

/* left(문자, n) / right(문자, n) : 왼쪽 / 오른쪽부터 n만큼 반환 */
select left('FLOWER', 2); 
select right('flower', 3);

left를 이용하여 FLOWER의 앞에서부터 2만큼인 FL을 뽑아왔습니다.

 

마찬가지로 right를 이용하여 flower의 뒤에서 3만큼인 wer을 뽑았습니다.

 

/* length : 문자수 */
select length('FLOWER');

length를 이용하여 FLOWER의 문자수를 반환했습니다.

 

FLOWER은 6글자이므로 맞게 반환된 것을 확인할 수 있습니다.

 

이제 날짜형 함수를 살펴보겠습니다.

 

 

 

날짜형 함수

/* year / month / day : 연 / 월 / 일 */
select year('1998-01-24');
select month('1998-01-24');
select day('1998-01-24');

저의 생일인 1998년 01월 24일을 가지고

 

year, month, day 함수를 통해 년, 월, 일의 값을 추출했습니다.

 

이번엔 제 나이를 통해 내년 생일을 확인해보겠습니다.

 

/* date_add(날짜, interval) : interval 만큼 더한 값 반환 */
select date_add('1998-01-24', interval +25 year);

제 만 나이가 현재 24살이므로 만 25세가 될 때의

 

날짜를 구해봤습니다.

 

date_add함수에 제 생년월일을 넣고

 

interval에 +25 year를 넣어주면 됩니다.

 

-를 해줘도 되고, year가 아닌 month나 day를 넣어줘도 됩니다.

 

그럼 이번에는 현재 2022년 4월 30일을 기준으로

 

제가 산 날짜가 며칠인지 알아볼까요?

 

/* datediff(날짜a, 날짜b) : 날짜a – 날짜b 일수 반환 */
select datediff('2022-04-30', '1998-01-24');

datediff함수를 이용하여 구해줬습니다.

 

diff는 difference의 약자로

 

앞의 날짜에서 뒤의 날짜를 뺀 값을 일수로 반환해줍니다.

 

저는 8862일을 살았네요.

 

이제 형 변환 함수를 알아보겠습니다.

 

 

 

형 변환 함수

/* date_format(날짜, 형식) : 날짜형식으로 변환 */
select date_format('1998-01-24', '%m-%d-%y');
select date_format('1998-01-24', '%M-%D-%Y');

date_format함수를 이용하여 년 월 일 순서가 아니라

 

월 일 년 순서로 바꿔줬습니다.

 

대소문자에 따라 다르게 표현되는 것을 알 수 있습니다.

 

/* cast(형식a, 형식b) : 형식a를 형식b로 변환 */
select cast('1998-01-24 13:07:10' as date);

cast 함수를 사용하여 년 월 일 시각까지 포함된 날짜 데이터를

 

date 형식으로 변환하여 뒤의 시각은 사라진 것을 확인할 수 있습니다.

 

이제 마지막으로 일반 함수입니다.

 

 

 

일반 함수

/* ifnull(a, b) : a가 NULL이면 b를 반환, 아니면 a 반환 */
select ifnull(NULL, 0);
select ifnull('NULL 아니당', 0);

ifnull 함수는 NULL이면 뒤의 값을 반환해줍니다.

 

반대로 NULL이 아닐 경우 뒤의 값이 아닌 그 값을 그대로 반환해옵니다.

 

위를 살펴보면 NULL이 들어갔을 때는 뒤의 숫자인 0이

 

'NULL이 아니당'이라는 문자가 들어갔을 때는 뒤의 숫자인 0이 아닌

 

앞의 'NULL이 아니당'이라는 문자가 그대로 출력된 것을 볼 수 있습니다.

 

select * from insurance;

마지막으로 조건을 거는 함수를 알아보기 위해 앞서 사용한 insurance 데이터를 가져왔습니다.

 

sex변수가 male과 female으로 나뉘어 있으므로

 

이것을 각각 남성과 여성으로 반환을 해볼까요?

 

select * 
,case when sex = 'male' then '남성'
else '여성' end
from insurance;

select * 뒤에 ,case when으로 sex가 male일 때

 

남성으로 반환을 시켜주고

 

성별은 2개의 범주형 데이터이므로 나머지는 female일 것입니다.

 

따라서 else '여성'을 이용하여 나머지를 여성으로 반환시켰습니다.

 

조건이 마무리가 되면 꼭 end를 사용해줘야 합니다.

 

데이터가 제대로 변환된 것을 확인할 수 있죠.

 

하지만 테이블의 변수 이름이 복잡하므로 성별이라는 이름으로 변수를 지정해주겠습니다.

 

select * 
,case when sex = 'male' then '남성'
else '여성' end as '성별'
from insurance;

복잡한 것 없이 as '성별'을 추가하여

 

깔끔하게 추가한 열의 이름을 변경해줬습니다.

 

다음에는 복수 행 함수로 찾아오겠습니다!

'데이터분석 공부 > SQL' 카테고리의 다른 글

[SQL] 복수 행 함수  (0) 2022.05.01
[SQL] 특수 연산자, 집합 연산자  (0) 2022.04.28
[SQL] 비교 연산자, 논리 연산자  (0) 2022.04.28
[SQL] 테이블 결합 - JOIN  (0) 2022.04.27
[SQL] 데이터 조회 - SELECT  (0) 2022.04.21