단일행함수 - 숫자함수
------------ >> 2. 숫자 함수 << ------------
-- 2.1 mod : 나머지를 구해주는 것
-- 2. trunc : 몫을 구해주는 것
select 5/2, mod(5,2), trunc(5/2)
from dual;
-- 2.5 1 2
-- 2.2 round : 반올림을 해주는 것.
select 94.547
, round(94.547) -- 95
, round(94.547, 0) -- 95 0 은 정수 1자리까지만 나타내어준다.
, round(94.547, 1) -- 94.5 1 은 소수 첫째자리까지만 나타내어준다.
, round(94.547, 2) -- 94.55 2 은 소수 둘째자리까지만 나타내어준다.
, round(94.547, -1) -- 90 -1 은 정수 10자리까지만 나타내어준다.
, round(94.547, -2) -- 100 -2 은 정수 100자리까지만 나타내어준다.
from dual;
-- 2.3 trunc : 절삭을 해주는 것.
select 94.547
, trunc(94.547) -- 95
, trunc(94.547, 0) -- 95 0 은 정수 1자리까지만 나타내어준다.
, trunc(94.547, 1) -- 94.5 1 은 소수 첫째자리까지만 나타내어준다.
, trunc(94.547, 2) -- 94.55 2 은 소수 둘째자리까지만 나타내어준다.
, trunc(94.547, -1) -- 90 -1 은 정수 10자리까지만 나타내어준다.
, trunc(94.547, -2) -- 100 -2 은 정수 100자리까지만 나타내어준다.
from dual;
-- 2.4 power : 거듭제곱
select 2*2*2*2*2, power(2,5) -- 2의 5승
from dual;
-- 2.5 sqrt : 제곱근
select sqrt(16), sqrt(2), sqrt(3)
from dual;
-- 2.6 sin, cos, tan, asin, acos, atan
select sin(90), cos(90), tan(90), asin(0.3), acos(0.3), atan(0.3)
from dual;
-- 2.7 log
select log(10, 100)
from dual;
-- 2.8 sign ==> 결과값이 양수라면 1, 결과값이 0이라면 0, 결과값이 음수라면 -1
select sign(5-2), sign(5-5), sign(2-5)
from dual;
-- 2.9 ceil(실수) ==> 입력된 실수보다 큰 최소의 정수를 나타낸다.
-- ceil(정수) ==> 입력된 정수를 그대로 나타낸다.
select ceil(10.1), ceil(10), ceil(-10.1), ceil(-10)
from dual;
-- 11 10 -10 -10
-- 2.10 floor(실수) ==> 입력된 실수보다 작은 최대의 정수를 나타낸다.
-- floor(정수) ==> 입력된 정수를 그대로 나타낸다.
select floor(10.1), floor(10), floor(-10.1), floor(-10)
from dual;
-- 10 10 -11 -10
-- 2.11 ascii, chr
select ascii('A'), ascii('a'), ascii(0), ascii(' ')
from dual;
-- 65 97 48 32
select chr(65), chr(97), chr(48), chr(32)
from dual;
-- A a 0 ' '
-- ========================== [퀴즈] ========================== --
-- *** [성적처리] *** --
---------------------------------------------------------------
학번 성명 국어 영어 수학 총점 평균(소수부 첫째자리까지, 반올림), 학점 90 A
---------------------------------------------------------------
create table tbl_sungjuk
(hakbun varchar2(20)
,name varchar2(20)
,kor number(3)
,eng number(3)
,math number(3)
);
select *
from tbl_sungjuk;
--- *** 데이터 입력하기 *** ---
insert into tbl_sungjuk(hakbun, name, kor, eng, math) values('sist001','한석규',90,92,93);
insert into tbl_sungjuk(hakbun, name, kor, eng, math) values('sist002','두석규',100,100,100);
insert into tbl_sungjuk(hakbun, name, kor, eng, math) values('sist003','세석규',71,72,73);
insert into tbl_sungjuk(hakbun, name, kor, eng, math) values('sist004','네석규',89,87,81);
insert into tbl_sungjuk(hakbun, name, kor, eng, math) values('sist005','오석규',60,50,40);
insert into tbl_sungjuk(hakbun, name, kor, eng, math) values('sist006','육석규',80,81,87);
commit;
select *
from tbl_sungjuk;
select hakbun 학번
, name
, kor
, eng
, math
, kor+eng+math 총점
, round((kor+eng+math)/3, 1) 평균
, case
when round( (kor+eng+math)/3, 1 ) >= '90' then 'A'
when round( (kor+eng+math)/3, 1 ) >= '80' then 'B'
when round( (kor+eng+math)/3, 1 ) >= '70' then 'C'
when round( (kor+eng+math)/3, 1 ) >= '60' then 'D'
else 'F'
end 학점
from tbl_sungjuk;
select hakbun 학번
, name
, kor
, eng
, math
, kor+eng+math 총점
, round((kor+eng+math)/3, 1) 평균
, case round( (kor+eng+math)/3, -1 )
when 100 then 'A'
when 90 then 'A'
when 80 then 'B'
when 70 then 'C'
when 60 then 'D'
else 'F'
end 학점
from tbl_sungjuk;
select hakbun 학번
, name
, kor
, eng
, math
, kor+eng+math 총점
, round((kor+eng+math)/3, 1) 평균
, case trunc( round((kor+eng+math)/3, -1) )
when 100 then 'A'
when 90 then 'A'
when 80 then 'B'
when 70 then 'C'
when 60 then 'D'
else 'F'
end 학점2
from tbl_sungjuk;
select hakbun 학번
, name
, kor
, eng
, math
, kor+eng+math 총점
, round((kor+eng+math)/3, 1) 평균
, decode( trunc(round((kor+eng+math)/3,1),-1), 100, 'A'
, 90, 'A'
, 80, 'B'
, 70, 'C'
, 60, 'D'
, 'F') 학점3
from tbl_sungjuk;