▣ 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;
-- 정확한 값 리턴
'데이터베이스' 카테고리의 다른 글
데이터마이닝_연관규칙(Association)_지지도, 신뢰도, 향상도, Apriori, 빈발항목 (0) | 2021.08.29 |
---|---|
정규화- BCNF 분해 (0) | 2021.08.29 |
GROUP BY 관련 SQL 예제 2, 고객, 주문, 총액, 쇼핑몰 데이터베이스 (0) | 2021.08.28 |
병행제어 - 낙관적 동시성 제어 (0) | 2021.08.28 |
트랜잭션_병행제어 _ 충돌 직렬, 뷰 직렬 가능 스케쥴, 직렬성 (2) | 2021.08.28 |