다음 두 SQL ㉠, ㉡의 결과 행 수를 차례로 나타낸 것은?[청구]청… | [SQLD] SQL 개발자 기출유형 모의고사 10회 상세 페이지
1[SQLD] SQL 개발자 기출유형 모의고사 10회
다음 두 SQL ㉠, ㉡의 결과 행 수를 차례로 나타낸 것은?[청구]
| 청구번호 | 고객번호 | 청구액 |
|---|---|---|
| 1 | C1 | 120 |
| 2 | C1 | 30 |
| 3 | C2 | 60 |
| 4 | C2 | 50 |
| 5 | C3 | 90 |
| 6 | C4 | 200 |
| 7 | C4 | (null) |
| 8 | C5 | 40 |
| 9 | C5 | 30 |
| 10 | C5 | 20 |
㉠ SELECT 고객번호, SUM(청구액)
FROM 청구
WHERE 청구액 >= 100
GROUP BY 고객번호;
㉡ SELECT 고객번호, SUM(청구액)
FROM 청구
GROUP BY 고객번호
HAVING SUM(청구액) >= 100;1
2, 3
2
5, 3
3
2, 2
4
3, 2
해설
㉠은 WHERE 가 그룹화 전에 행 단위로 걸러 청구액 100 이상인 행이 있는 C1·C4만 남아 2행이다.
㉡은 모든 행을 묶은 뒤 HAVING 이 합계를 걸러 C1(150)·C2(110)·C4(200)의 3행이고, C3·C5는 합계 90이라 빠진다.
- 3, 2는 WHERE 와 HAVING 의 결과를 서로 바꾼 것이다.
- 2, 2는 C2 처럼 작은 청구를 합쳐 100 이상이 되는 그룹을 놓쳤다.
- 5, 3은 WHERE 로 행이 모두 빠진 그룹도 남는다고 보았다.
오류나 개정된 내용이 보이면 알려주세요