COUNT 비교
SELECT COUNT(*)
FROM EMP;
SELECT COUNT(MGR)
FROM EMP;
SELECT COUNT(DISTINCT MGR)
FROM EMP;
실행결과



NVL()
SELECT AVG(COMM) FROM EMP;
SELECT AVG(NVL(COMM, 0)) FROM EMP;
실행결과


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
,SUM(SAL) AS SAL
FROM EMP
GROUP BY ROLLUP(DEPTNO,JOB);
실행결과

숫자형인 시간 평균값 구하기
SELECT EMPNO
,CASE WHEN SUBSTR(LPAD(ROUND(AVG(NVL(CHULGEUN_SIGAN,'1800'))),4,0),3,2)>=60 THEN LPAD(SUBSTR(LPAD(ROUND(AVG(NVL(CHULGEUN_SIGAN,'1800'))),4,0),1,2)+1,2,0) || LPAD(MOD(SUBSTR(LPAD(ROUND(AVG(NVL(CHULGEUN_SIGAN,'1800'))),4,0),3,2),60),2,0)
ELSE LPAD(ROUND(AVG(NVL(CHULGEUN_SIGAN,'1800'))),4,0) END AS AVG_MIN
FROM EMP_CHULGYEOL
GROUP BY EMPNO
ORDER BY EMPNO;
실행결과

CONNECT BY LEVEL
SELECT LEVEL
FROM DUAL
CONNECT BY LEVEL <=10;
SELECT LEVEL*0.1
FROM DUAL
CONNECT BY LEVEL <=5;
실행결과


오류이유
SELECT * FROM EMPFAMILY
WHERE AVG(AGE) > 40;
마지막,지우기
WITH T AS(
SELECT '100,101,102,103,' AS TXT FROM DUAL
)
SELECT RTRIM(TXT,',') AS TXT
FROM T;
실행결과

구분자 위치로 자르기
WITH TMP AS
(
SELECT '10.100.10.1' AS IP FROM DUAL
UNION ALL SELECT '10.100.1.10' FROM DUAL
UNION ALL SELECT '10.10.10.10' FROM DUAL
UNION ALL SELECT '1.10.1.20' FROM DUAL
UNION ALL SELECT '3.10.1.140' FROM DUAL
)
SELECT IP
, LPAD( SUBSTR(IP,1,INSTR(IP,'.',1,1)-1) ,3,0) AS IP_1
, LPAD( SUBSTR(IP,INSTR(IP,'.',1,1)+1,INSTR(IP,'.',1,2)-INSTR(IP,'.',1,1)-1) ,3,0) AS IP_2
, LPAD( SUBSTR(IP, INSTR(IP,'.',1,2)+1, INSTR(IP,'.',1,3)-INSTR(IP,'.',1,2)-1) ,3,0) AS IP_3
, LPAD( SUBSTR(IP, INSTR(IP,'.',1,3)+1),3,0) AS IP_4
FROM TMP
ORDER BY IP_1,IP_2,IP_3,IP_4;
실행결과
