일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 데이터 분석
- 태블로
- Google ML Bootcamp
- SQLD
- ML
- 코딩테스트
- 이것이 코딩테스트다
- matplotlib
- tableau
- 딥러닝
- scikit learn
- 이코테
- 자격증
- 데이터 전처리
- IRIS
- Deep Learning Specialization
- sklearn
- 파이썬
- ADsP
- 시각화
- 머신러닝
- 회귀분석
- 데이터분석준전문가
- 통계
- r
- 데이터분석
- pandas
- pytorch
- Python
- SQL
- Today
- Total
함께하는 데이터 분석
[SQL] 단일 행 함수 본문
오늘은 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 |