모든지 기록하자!

[Oracle] ORDER BY , GROUP BY 와 예제 본문

Database

[Oracle] ORDER BY , GROUP BY 와 예제

홍크 2021. 5. 26. 20:34
728x90

이번 게시물에 핵심 기능을 알아보자

ORDER BY -- 자바의 SORTING과 동일

--형태 : 
SELECT
FROM
WHERE
ORDER BY
SELECT 컬럼명
FROM 테이블명
ORDER BY 컬럼명 ASC; -- 올림차순 정렬

SELECT 컬럼명
FROM 테이블명
ORDER BY 컬럼명 DESC; -- 내림차순 정렬

-- ASC,DESC 모두 사용하는 응용문제
SELECT employee_id, job_id, salary
FROM employees
ORDER BY job_id ASC, salary DESC; 
-- job_id를 먼저 올림차순 정렬 하고 그안에서 다시 salary로 내림차순 정렬
-- ALIAS으로도 가능하다.
SELECT 컬럼명 AS 별칭
FROM 테이블명
ORDER BY 별칭 DESC;
SELECT 컬럼명
FROM 테이블명
ORDER BY 컬럼명 NULLS FIRST;   -- NULL이 제일위로 올라옴
                              -- NULLS LAST 는 디폴트값  
형식 :
Select 칼럼명, 그룹함수
FROM 테이블명
WHERE 조건(연산자)
GROUP BY 칼럼명;

GROUP BY : 그룹으로 묶는 기능
HAVING : 묶었을 때 조건
         묶은 다음 일반 컬럼 사용불가

통계 - GROUP FUNCTION
        COUNT = 카운트
        SUM = 합계 
        AVG = 평균
        MAX = 최대값
        MIN = 최소값

활용 예시와 실습 문제

/*
        ORDER BY == SORTING
        
        SELECT
        FROM
        WHERE
        ORDER BY

*/

SELECT ename,sal
FROM emp
ORDER BY sal ASC; -- 올림차순 정렬

SELECT ename, sal
FROM emp
ORDER BY sal DESC;  -- 내림차순 정렬

-- ALIAS

SELECT empno, ename, sal*12 AS annsal
FROM emp
ORDER BY annsal DESC;


SELECT ename, comm
FROM emp
ORDER BY comm NULLS FIRST; -- NULL이 제일위로 올라옴
                                                 --NULLS LAST 는 디폴트값
                                                 
SELECT employee_id, job_id, salary
FROM employees
ORDER BY job_id ASC, salary DESC; -- job_id 정렬하고 그안에서 다시 내림차순 정렬

/*
        GROUP BY : 그룹으로 묶는 기능
        HAVING : 묶었을 때 조건
        
*/

SELECT DISTINCT job_id
FROM employees;

/*
        통계 - GROUP FUNCTION
        COUNT
        SUM
        AVG
        MAX
        MIN

*/

SELECT COUNT(salary)  ,COUNT(*), SUM(salary), AVG(salary),
        MAX(salary), MIN(salary)
FROM employees
WHERE job_id = 'IT_PROG';

-- 묶은 다음 일반 컬럼 사용불가
SELECT job_id, COUNT(*), sum(salary), AVG(salary)
FROM employees
GROUP BY job_id
ORDER BY job_id;                                           
            --COUNT : 각 부서별 몇명인가      
 
-- 업무별로 급여의 합계가 1000000이상인 업무만 출력     
SELECT job_id, SUM(salary)
FROM employees
GROUP BY job_id -- 그룹바이는 묶은것만 출력가능   --1번
HAVING SUM(salary) >= 100000;                           --2번
--HAVING은 묶은 다음에 조건
            
-- 급여가 5000이상 받는 사원으로 합계를 내서 업무로 그룹화하여 
-- 급여의 합계가 20000을 초과하는 업무명을 구하세요
SELECT job_id, SUM(salary) AS 합계
FROM employees
WHERE salary>= 5000            --WHERE 절이 항상 먼저
GROUP BY job_id
HAVING SUM(salary) > 20000
ORDER BY 합계 DESC;

 

728x90
Comments