Contents
접기
기타 함수
함수 종류 | 사용 |
DECODE | 다른 언어의 IF문과 유사한 개념의 함수 DECODE(exp1, cond1, result1, cond2, result2, cond3, result3, default ) |
CASE~WHEN | 자바 언어의 switch~case 와 유사한 개념의 함수 case when 조건식1 then 값1 when 조건식2 then 값2 else 값n end |
DECODE
select
first_name, department_id
, decode(department_id, 10, 'Administration',
20, 'Maketing',
30, 'Purchasing',
40, 'Human Resources',
50, 'Shipping'
) as department_nm
-- 107명을 다 조회한다.
from employees
where department_id in(10,20,30,40,50);
-- where department_name is not null --> X
CASE ~ WHEN 으로 변경
select
first_name, department_id
, case when department_id = 10 then 'Administration'
when department_id = 20 then 'Maketing'
when department_id = 30 then 'Purchasing'
when department_id = 40 then 'Human Resources'
when department_id = 50 then 'Shipping'
else 'etc'
end as department_nm
-- 107명을 다 조회한다
from employees;
그룹핑 함수
SUM(컬럼명) | AVG(컬럼명) | COUNT(컬럼명) | MIN() / MAX(컬럼명) |
합계 | 평균 | 개수 | 최소/최대 |
SUM() : 전체 결과가 레코드 개수만큼 나오지 않는다.
salary 다 더한 값 하나만 나온다.
SELECT sum(salary)
from employees;
COUNT() : null 값 제외하고 개수를 샌다.
select count(employee_id)
from employees;
select count(commission_pct)
from employees;
COUNT() : null 값 제외하지 않고 모든 개수를 세려면?
select count(*)
from employees;
[Q] 부서별 최대 최소 급여를 조회
select min(salary), max(salary)
from employees;
[Q] 부서별 최대 최소 급여와 manager_id 를 조회
그룹핑과 관련없는 일반 컬럼이 select 절에 있으면 오류 발생한다.
따라서 select 문에서 manager_id 를 같이 조회하고 싶다면 group by 에도 manager_id 를 적어야 한다.
select department_id, min(salary), max(salary), manager_id
from employees
group by department_id, manager_id;
query - 조건문
WHERE | HAVING |
일반 컬럼에 조건을 거는 | grouping 정보에 출력 조건을 거는 |
[Q] job_id 별 급여의 평균을 구하시오. (기본 query 문)
select job_id, avg(salary)
from employees
group by job_id
order by 2;
[Q] job_id 별 급여의 평균과 job_id을 구하시오. (단, 급여의 평균이 5000 이상만 조회하시오)
select job_id, avg(salary)
from employees
group by job_id
having avg(salary) >= 5000
order by 2;
문제
[Q] 부서의 인원 수가 없거나 1명인 부서를 제외하여 조회하시오.
select department_id, count(*)
from employees
group by department_id
having department_id is not null
order by 1;
select department_id, count(*)
from employees
group by department_id
having department_id is not null and count(*) != 1;
[Q] 입사년도별 입사인원을 조회하시오 (년도 4자리 입사인원)
SELECT MIN(입사인원) FROM
(
SELECT
TO_CHAR(HIRE_DATE, 'YYYY')AS 입사년도
, COUNT(*) AS 입사인원
FROM
EMPLOYEES
GROUP BY TO_CHAR(HIRE_DATE, 'YYYY')
ORDER BY TO_CHAR(HIRE_DATE, 'YYYY')
) TEMP
WHERE 입사인원 = 1;
'국비 교육 > SQL(Oracle)' 카테고리의 다른 글
[오라클] DB 명령문 - 1 (0) | 2024.02.05 |
---|---|
[오라클] 서브 쿼리 Sub Query (0) | 2024.02.05 |
[오라클] 조인 JOIN (0) | 2024.02.04 |
[오라클] 함수 function - 2 (0) | 2024.02.01 |