데이터베이스 기초

성적 표의 점수 열에 50, NULL, 70, NULL, 90, 30의 6개 값이 있다. SELECT COUNT(*), COUNT(점수), AVG(점수) FROM 성적의 결과를 순서대로 나열한 것은?

  1. A6, 6, 40
  2. B6, 4, 40
  3. C6, 4, 60
정답과 해설 보기

정답: C. 6, 4, 60

COUNT(*)는 NULL을 포함하는지와 관계없이 행의 수를 세므로 6입니다. COUNT(점수)처럼 열을 지정하면 그 열이 NULL이 아닌 행만 세므로 4입니다. AVG(점수)는 NULL이 아닌 4개 값의 합계 50 + 70 + 90 + 30 = 240을 NULL이 아닌 값의 개수 4로 나누므로 240 ÷ 4 = 60입니다. 합계를 전체 행 수로 나눈 SUM(점수) / COUNT(*) = 240 ÷ 6 = 40과는 일치하지 않는다는 점에 주의해야 합니다. NULL을 0점으로 다루고 싶다면 COALESCE(점수, 0)로 바꾼 뒤 집계합니다.

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

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

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