데이터베이스 기초

시험 표의 점수 열에 80, NULL, 70, 90의 4개 값이 있다(NULL은 미응시를 나타낸다). SELECT AVG(점수) FROM 시험의 결과는?

  1. A60
  2. B80
  3. CNULL
정답과 해설 보기

정답: B. 80

SQL의 집계 함수(SUM, AVG, MAX, MIN, 열을 지정한 COUNT)는 NULL을 무시하고 계산합니다. AVG(점수)는 NULL이 아닌 3개 값의 평균이므로 (80 + 70 + 90) ÷ 3 = 240 ÷ 3 = 80입니다. NULL을 0으로 보고 4로 나누면 240 ÷ 4 = 60이 되지만, AVG는 그렇게 계산하지 않습니다. 미응시자를 0점으로 하여 평균을 내고 싶을 때는 AVG(COALESCE(점수, 0))처럼 NULL을 0으로 바꾼 뒤 집계합니다. 참고로 값이 모두 NULL인 경우 AVG의 결과는 NULL이 됩니다.

이 분야 연습하기 분야로 돌아가기

데이터베이스 기초의 다른 문제

  1. 성적 표의 점수 열에 50, NULL, 70, NULL, 90, 30의 6개 값이 있다. SELECT COUNT(*), COUNT(점수), AVG(점수) FROM 성적의 결과를 순서대로 나열한 것은?
  2. 사원 표(사원번호, 부서, 급여)에서 부서별 평균 급여가 300 이상인 부서와 그 평균 급여를 구하려고 한다. 올바른 SQL 문은?
  3. 매출 표(매장, 금액)에 (A, 500), (A, 700), (B, 300), (B, 400), (C, 1200), (D, 200), (D, 900)의 7개 행이 있다. SELECT 매장, SUM(금액) FROM 매출 GROUP BY 매장 HAVING SUM(금액) >= 1000의 결과는 몇 행이 되는가?
  4. 사원 표(이름, 부서, 급여)에 8개 행이 있고, 부서별 급여는 영업이 320, 280, 350, 개발이 400, 310, 총무가 260, 300, 기획이 330이다. SELECT 부서, COUNT(*) FROM 사원 WHERE 급여 >= 300 GROUP BY 부서 HAVING COUNT(*) >= 2의 결과는 몇 행이 되는가?
  5. 사원 표(사원번호, 이름, 부서ID)에 4개 행이 있고, 부서ID는 차례로 10, 20, 10, NULL이다. 부서 표(부서ID, 부서명)에는 부서ID가 10, 20, 30인 3개 행이 있다. SELECT 사원.이름, 부서.부서명 FROM 사원 INNER JOIN 부서 ON 사원.부서ID = 부서.부서ID의 결과는 몇 행이 되는가?