SQL SELECT ORDER BY 정렬하기 / GROUP BY / HAVING / 통계 (그룹함수)
* ORDER BY == Sorting
- 형식 :
SELECT COLUMN VALUE SUBQUERY
FROM TABLE SUBQUERY
WHERE IF
ORDER BY COLUMN ASC 오름(생략가능)
DESC 내림
-- 오름차순 ASC
SELECT first_name, salary
FROM employees
ORDER BY salary ASC;
-- 내림차순 DESC
SELECT first_name, salary
FROM employees
ORDER BY salary DESC;
-- ALIAS로 정렬하기
SELECT employee_id, first_name, SALARY * 12 AS annsal
FROM employees
ORDER BY annsal DESC;
- ORDER BY SALARY * 12 DESC; 와 동일
-- NULL FIRST
SELECT commission_pct
FROM employees
ORDER BY commission_pct NULLS FIRST;
- NULL이 먼저 출력되고 그 다음 값이 있는 부분 정렬하여 출력
-- NULL LAST
SELECT commission_pct, salary
FROM employees
ORDER BY commission_pct NULLS LAST, salary DESC;
- COMMISSION_PCT 먼저 NULL이 맨 뒤에 오도록 정렬 후, SALARY를 기준으로 내림차순 정렬
-- 입사 순으로 정렬한 뒤 급여 역순 정렬
SELECT hire_date, salary, JOB_ID
FROM employees
ORDER BY hire_date ASC, salary DESC;
- 같은 날짜 안에서 급여로 정렬
-- 업무명으로 정렬, 급여 역순 정렬
SELECT job_id, salary
FROM employees
ORDER BY job_id ASC, salary DESC;
* GROUPING
- GROUP BY : 그룹으로 묶는 기능
- HAVING : 그룹으로 묶은 후의 조건
(WHERE : 그룹으로 묶기 전 조건)
SELECT department_id
FROM employees
GROUP BY department_id
ORDER BY department_id ASC;
SELECT job_id
FROM employees
GROUP BY JOB_ID
ORDER BY job_id ASC;
- 중복 데이터가 있는 부분을 묶을 수 있다.
- 묶은 컬럼만 출력가능 (DISTINCT와 비슷)
* 통계 (그룹함수) : 그룹으로 묶었을 때 사용 가능 (정석)
- COUNT
- SUM
- AVG
- MAX
- MIN
SELECT job_id, COUNT(employee_id)
FROM employees
GROUP BY job_id;
SELECT job_id, COUNT(*)
FROM employees
GROUP BY job_id;
- COUNT(employee_id) == COUNT(*)
- 중복이 되지 않는 부분을 전부 포함시켜 개수 셈
SELECT job_id, COUNT(*), SUM(salary), AVG(salary), MAX(salary), MIN(salary)
FROM employees
GROUP BY job_id;
- 부서별로 묶어서, 부서별 인원, 급여 합계, 급여 평균, 최대 급여, 최소급여를 출력할 수 있다.
-- HAVING : 그룹으로 묶은 후의 조건
SELECT job_id, COUNT(*), SUM(salary), AVG(salary)
FROM employees
GROUP BY job_id
HAVING SUM(salary) >= 100000;
- 급여를 5000이상 받는 사원만으로 합계를 내서 JOB_ID(업무)으로 그룹화하여 급여의 합계가 20000을 초과하는 JOB_ID명(업무)을 구하라
SELECT job_id, SUM(SALARY) -- 4
FROM employees
WHERE salary >= 5000 -- 묶기 전 조건 : 필터링 -- 1
GROUP BY job_id -- 2
HAVING SUM(salary) > 20000; -- 묶은 후 조건 -- 3
- 처리순서 : WHERE → GROUP BY → HAVING → SELECT