메뉴 건너뛰기

bysql.net

스터디를 끝마치고, 남은 하루 일과 중 30분 남짓해서 올립니다.


SELECT * FROM EMP;


-- 빈로우가 선택되었을시에 대체방법
SELECT  COUNT(EMPNO) AS CNT
FROM    EMP
WHERE   ENAME = 'SMITH'
AND     JOB <> 'CLERK';

-- 안된다...
SELECT  COUNT(EMPNO) AS CNT
FROM    EMP
WHERE   ENAME = 'SMITH'
AND     JOB <> 'CLERK'
GROUP   BY EMPNO;


-- 안된다...
SELECT  NVL(COUNT(EMPNO), 0) AS CNT
FROM    EMP
WHERE   ENAME = 'SMITH'
AND     JOB <> 'CLERK'
GROUP   BY EMPNO;


-- 역시 안된다...
SELECT  DECODE(COUNT(EMPNO), 0, 0, COUNT(EMPNO)) AS CNT
FROM    EMP
WHERE   ENAME = 'SMITH'
AND     JOB <> 'CLERK'
GROUP   BY EMPNO;


-- 좋다 GROUP BY 빼보자! 된다...!
SELECT  DECODE(COUNT(EMPNO), 0, 0, COUNT(EMPNO)) AS CNT
FROM    EMP
WHERE   ENAME = 'SMITH'
AND     JOB <> 'CLERK';


-- 역시 안된다...
SELECT  DECODE(COUNT(EMPNO), 0, 'SALESMAN', MAX(JOB)) AS JOB
FROM    EMP
WHERE   ENAME = 'SMITH'
AND     JOB <> 'CLERK'
GROUP   BY JOB;



-- 이유가 뭘까.....!?
-- GROUP BY를 주었을때와 안주었을시에 왜 다를까...
SELECT  DECODE(COUNT(EMPNO), 0, 'SALESMAN', MAX(JOB)) AS JOB
FROM    EMP
WHERE   ENAME = 'SMITH'
AND     JOB <> 'CLERK';