SELECT expr1, expr2, ...
FROM ...
WHERE ...
GROUP BY expr1, expr2, ...
ORDER BY ... ;
SELECT TO_CHAR(hire_date,'yyyy') AS HIRE_YEAR
FROM employees
GROUP BY TO_CHAR(hire_date,'yyyy') ;
-> 입사년도별 집계를 하므로 총 죄회 되는 로우 수는 8개
-> GROUP BY 절에는 SELECT 절에 기술한 형태 그대로 사용해야 함 (별칭은 기술하면 안됨) ★
SELECT COUNT(*) AS total_cnt
, MIN(salary) as min_salary
, MAX(salary) as max_salary
FROM employees ;
-> employees 테이블의 전체 로우 건 수
-> salary 컬럼의 최소와 최댓값
SELECT DISTINCT expr1, expr2 …
FROM …
SELECT job_id
FROM employees
GROUP BY job_id;
SELECT DISTINCT job_id
FROM employees;
-> 두 결과값 같음
-- employees 테이블의 jod_id별 건수, salary컬럼의 최소와 최댓값
SELECT job_id
, COUNT(*) AS total_cnt
, MIN(salary) AS min_salary
, MAX(salary) AS max_salary
FROM employees
GROUP BY job_id
ORDER BY job_id ;
-- 2004년 이후 입사 년도와 부서별 총 인원수와 급여 총액, 급여 평균
select to_char(hire_date, 'yyyy') as 입사년도
, department_id as 부서
, count(*) as 총인원수
, sum(salary) as 급여총액
, round(avg(salary),0) as 급여평균 --round 함수로 소숫점 제거
from employees
where to_char(hire_date, 'yyyy') >='2004'
group by to_char(hire_date, 'yyyy'), department_id
order by 1,2;
-- 입사년도와 부서별 총 인원수, 급여 총액, 급여 평균이 5000이상인 값 조회
select to_char(hire_date, 'yyyy') as 입사년도
, department_id as 부서
, count(*) as 총인원수
, sum(salary) as 급여총액
, round(avg(salary),0) as 급여평균 --round 함수로 소숫점 제거
from employees
group by to_char(hire_date, 'yyyy'), department_id
Having round(avg(salary),0) >=5000 --집계함수 조건은 Having절 사용★
order by 1,2;
-- 보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 09:00부터 19:59까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다.
SELECT to_char(datetime, 'hh24') AS HOUR
, count(*) AS COUNT
FROM animal_outs
WHERE to_char(datetime, 'hh24') >='09'
AND to_char(datetime, 'hh24') <'20'
GROUP BY to_char(datetime, 'hh24')
ORDER BY 1;