데이터베이스

GROUP BY, HAVING SQL 예제 3, 부양가족 2명이상, 사원, 사번, 성명

스윙스윙 2021. 8. 28. 16:41

▣ GROUP BY, HAVING 예제 3

2015번 69번

정답 : 3번, 4번

1) 1번 보기 : 집계 함수에 대한 조건절은 HAVING 을 사용해야 함
2) 2번 보기 : Group by 절을 사용했으나 SELECT 절 count(*) 전체 갯수 리턴

 



-- 2015년 정보시스템감리사 DB 69번

CREATE TABLE DEPEND_69
(
  ENO INT
, DNAME VARCHAR(20)
, REL VARCHAR(20)
, PRIMARY KEY (ENO, DNAME)
)
;

INSERT INTO DEPEND_69 VALUES (1, '홍길동', '부');
INSERT INTO DEPEND_69 VALUES (1, '김영희', '모');
INSERT INTO DEPEND_69 VALUES (2, '이감찬', '부');
INSERT INTO DEPEND_69 VALUES (2, '정윤희', '모');
INSERT INTO DEPEND_69 VALUES (3, '강순신', '부');

COMMIT;

SELECT * FROM DEPEND_69;

DROP TABLE EMP_69;
CREATE TABLE EMP_69
(
  ENO INT
, ENAME VARCHAR(20)
, PRIMARY KEY (ENO)
)
;

INSERT INTO EMP_69 VALUES (1, '홍동호');
INSERT INTO EMP_69 VALUES (2, '이수아');
INSERT INTO EMP_69 VALUES (3, '강승희');

COMMIT;

SELECT * FROM EMP_69;

-- 보기 1번
SELECT ENO, ENAME, COUNT(*)
FROM EMP_69 E, DEPEND_69 D
WHERE E.ENO = D.ENO AND COUNT(*) >= 2
GROUP BY D.ENO;

-- ENO 귀속 테이블이 어디인지 몰라서 에러 발생

-- 보기 2번
SELECT E.ENO, E.ENAME, COUNT(*)
FROM EMP_69 E, DEPEND_69 D
WHERE EXISTS(SELECT * FROM DEPEND_69
GROUP BY ENO HAVING COUNT(*) >=2)
GROUP BY E.ENO, E.ENAME;

 

-- 전체 카운트수 리턴

-- 보기 3번
SELECT E.ENO, E.ENAME, T.CNT
FROM EMP_69 E, (SELECT ENO, COUNT(*) AS CNT
        FROM DEPEND_69 GROUP BY ENO HAVING COUNT(*) >=2) T
WHERE E.ENO = T.ENO;

-- 정확한 값 리턴


-- 보기 4번
SELECT E.ENO, E.ENAME, COUNT(*)
FROM EMP_69 E, DEPEND_69 D
WHERE E.ENO = D.ENO
GROUP BY E.ENO, E.ENAME 
HAVING COUNT(*) >=2;

 

-- 정확한 값 리턴