1. COUNT(*) / COUNT(컬럼명) / COUNT(DISTINCT 컬럼명) 실행결과와 차이점
COUNT(*)의 경우에는 컬럼의 전체행의 갯수를 가져오는 방식입니다.
COUNT(컬럼명)은 NULL을 제외한 행의 갯수를 가져오는 방식입니다.
마지막으로 COUNT(DISTINCT COMM)은 중복을 제외한 값들의 갯수를 가져옵니다.
이때 NULL값 또한 갯수에서 제외합니다.
2. SELECT AVG(COMM) FROM EMP 와 SELECT AVG(NVL(COMM, 0)) FROM EMP
실행결과와 차이점. 왜 결과가 다른지?
SELECT COUNT(COMM)
FROM EMP;
SELECT COUNT(NVL(COMM, 0))
FROM EMP;
전자의 경우에는 VALUE가 있는 값들의 평균을 구했지만, 후자의 경우 NULL 갯수(행의 총 갯수)까지 카운트해서 계산을 했기때문에 값이 다릅니다.
3. GROUP BY ROLLUP 을 활용한 소계 연습
사원별로 부서코드, 사원번호, 성명, 급여 조회
부서별 급여 합계 금액을 아래와 같이 표시
SELECT CASE WHEN JOB IS NOT NULL THEN TO_CHAR(DEPTNO) WHEN TO_CHAR(DEPTNO) IS NULL AND JOB IS NULL THEN '총계' ELSE NULL END AS DEPTNO
,CASE WHEN DEPTNO IS NOT NULL THEN (CASE WHEN (CASE WHEN JOB IS NOT NULL THEN DEPTNO ELSE NULL END) IS NOT NULL THEN JOB ELSE NVL(JOB, '소계(' || DEPTNO || '번부서)') END) ELSE NULL END AS JOB
,TO_CHAR(SUM(SAL),'FM$999,999,999') AS SAL
FROM EMP
GROUP BY ROLLUP(DEPTNO,JOB);
4. EMP_CHULGYEOL테이블에서 2019년 11월 사원별 평균 출근 시간을 구하기.
- 사원별 토,일요일을 제외한 평일(21)일에 대한 데이터가 모두 들어가있다.
- 출근시간이 비어있는 데이터는 해당일자에 결근한 사람이다.
- 결근시에는 18시에 출근한 것으로 처리한다.
- 출근시간이 빠른순으로 정렬.
SELECT EMPNO
, LPAD(FLOOR(FLOOR(AVG(SUBSTR(NVL(CHULGEUN_SIGAN, 1800),1,2)*60 + SUBSTR(NVL(CHULGEUN_SIGAN, 1800),3,4))) / 60),2,0) || LPAD(MOD(FLOOR(AVG(SUBSTR(NVL(CHULGEUN_SIGAN, 1800),1,2)*60 + SUBSTR(NVL(CHULGEUN_SIGAN, 1800),3,4))),60),2,0) AS AVG_MIN
FROM EMP_CHULGYEOL
GROUP BY EMPNO
ORDER BY EMPNO;
'DB' 카테고리의 다른 글
[DB] DB 필기 테스트 (0) | 2021.02.17 |
---|---|
[DB] 퀴즈 (0) | 2021.02.10 |
[DB] WITH 절 사용 예시 (0) | 2021.02.08 |
[오라클] JOIN / 서브쿼리 (0) | 2021.02.06 |
[오라클] GROUP BY절 연습 (0) | 2021.02.03 |