데이터베이스/Oracle

[Oracle] ORDER BY, HAVING, ALIAS, GROUP FUNCTION 연습

반응형

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; --ALIAS 로도 사용 가능하다.

SELECT ENAME, COMM
FROM EMP
ORDER BY COMM NULLS LAST; --NULLS FIRST NULL값이 맨 위로 올라온다. // NULLS default 값은 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 --DISTINCT 하나로 해서(그룹) 중복을 없앤다.
FROM EMPLOYEES;


통계
- GROUP FUNCTION
COUNT -> NULL은 갯수를 포함하지 않는다.
SUM
AVG
MAX
MIN
보통 함수를 같이 사용한다.


SELECT COUNT(SALARY), COUNT(*), SUM(SALARY), AVG(SALARY), -- * = 모두, IT부서의 전체연봉,평균연봉,최고연봉,최저연봉
MAX(SALARY), MIN(SALARY)
FROM EMPLOYEES
WHERE JOB_ID = 'IT_PROG';

SELECT JOB_ID, COUNT(*) --각 부서별로 몇명인지 출력
FROM EMPLOYEES
GROUP BY JOB_ID --주의!! 묶은 다음에는 일반 컬럼은 사용할 수 없다.
ORDER BY JOB_ID;

SELECT JOB_ID, SUM(SALARY), AVG(SALARY) --연봉의 합계, 평균
FROM EMPLOYEES
GROUP BY JOB_ID --주의!! 묶은 다음에는 일반 컬럼은 사용할 수 없다.
ORDER BY JOB_ID;

--업무별로 급여의 합계가 100000$ 이상인 업무만을 출력하라.
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
GROUP BY JOB_ID
HAVING SUM(SALARY) > 20000
ORDER BY "합계" DESC;

반응형