문제
다음과 같은 결과를 생성하는 SQL 작성
10번부서 | 20번부서 | 30번부서 |
3 | 5 | 6 |
정답1
SELECT SUM(DECODE(DEPTNO, 10, COUNT(DEPTNO), 0)) AS "10번부서",
SUM(DECODE(DEPTNO, 20, COUNT(DEPTNO), 0)) AS "20번부서",
SUM(DECODE(DEPTNO, 30, COUNT(DEPTNO), 0)) AS "30번부서"
FROM EMP
GROUP BY DEPTNO;
정답2
SELECT COUNT(CASE WHEN DEPTNO = 10 THEN 1 END) AS "10번부서",
COUNT(CASE WHEN DEPTNO = 20 THEN 1 END) AS "20번부서",
COUNT(CASE WHEN DEPTNO = 30 THEN 1 END) AS "30번부서"
FROM EMP;
정답3
SELECT SUBQUERY1.NUM AS "10번부서", SUBQUERY2.NUM AS "20번부서", SUBQUERY3.NUM AS "30번부서"
FROM (SELECT DEPTNO, COUNT(*) AS NUM
FROM EMP
GROUP BY DEPTNO
HAVING DEPTNO = 10) SUBQUERY1,
(SELECT DEPTNO, COUNT(*) AS NUM
FROM EMP
GROUP BY DEPTNO
HAVING DEPTNO = 20) SUBQUERY2,
(SELECT DEPTNO, COUNT(*) AS NUM
FROM EMP
GROUP BY DEPTNO
HAVING DEPTNO = 30) SUBQUERY3;
- FROM 절 SUBQUERY를 인라인뷰(inline views)라고 한다.
- 한글 ALIAS : 더블 쿼테이션(" ")을 사용한다.
- HAVING : GROUP BY 된 결과에 대한 필터
'데이터베이스 > ORACLE' 카테고리의 다른 글
[ORACLE] SELECT ~ FOR UPDATE 기능 및 용도 (0) | 2020.05.31 |
---|---|
[ORACLE] 'GROUP BY 구 없이 그룹 함수가 내포되었습니다' 에러 (0) | 2020.05.29 |
[ORACLE] 82년도에 입사한 직원 찾기(LIKE 활용) (0) | 2020.05.29 |
[ORACLE] DISTINCT 함수의 알고리즘 차이(9i VS 10g) (0) | 2020.05.29 |
[ORACLE] 해당 월의 마지막 법정 영업일자를 구하기(SYSDATE, 조건문 활용) (0) | 2020.05.29 |