[
  {
    "courseSlug": "sql-intermediate",
    "question": "GROUP BY로 행을 묶은 뒤, 제출 수가 20건 넘는 '팀(그룹)'만 남기고 싶다. 어떤 키워드 뒤에 COUNT(*) > 20 조건을 써야 할까?",
    "option1": "WHERE — 행을 하나씩 검사하는 입장 검사이므로",
    "option2": "ORDER BY — 조건에 맞는 팀을 앞으로 정렬하므로",
    "option3": "HAVING — 팀이 다 만들어진 뒤 팀 단위로 거르므로",
    "option4": "GROUP BY — 묶는 기준에 조건을 함께 적으므로",
    "answerIndex": 2,
    "explanation": "WHERE는 묶기 전 행 하나하나를 거르는 '입장 검사'라서 그 시점엔 셀 팀이 없고, 묶은 뒤 팀 단위로 거르는 문은 HAVING이다. 코스 2섹션(HAVING)의 실행 순서 WHERE → GROUP BY → HAVING → ORDER BY 개념이다."
  },
  {
    "courseSlug": "sql-intermediate",
    "question": "submission 테이블에서 아직 채점되지 않은(score가 NULL인) 제출을 조회하려면 어떤 조건을 써야 할까?",
    "option1": "WHERE score = NULL — 등호로 NULL과 직접 비교한다",
    "option2": "WHERE score IS NULL — IS로 NULL 여부를 검사한다",
    "option3": "WHERE score = 0 — NULL은 0점과 같은 값이므로",
    "option4": "WHERE COALESCE(score) — NULL을 자동으로 찾아준다",
    "answerIndex": 1,
    "explanation": "NULL은 '모름'이라서 = 로 비교하면 결과도 NULL이 되어 항상 0건이 나오고, NULL 여부는 IS NULL로 검사해야 한다. 코스 4섹션(NULL의 함정)의 함정 ①에 해당한다."
  },
  {
    "courseSlug": "sql-intermediate",
    "question": "제출이 5건 있고 score가 (90, 80, NULL, 70, NULL)일 때, AVG(score)의 결과는?",
    "option1": "80 — NULL 두 건은 건너뛰고 240을 3으로 나눈다",
    "option2": "48 — NULL을 0으로 쳐서 240을 5로 나눈다",
    "option3": "NULL — NULL이 하나라도 끼면 집계 전체가 NULL이 된다",
    "option4": "60 — NULL을 최솟값으로 바꾼 뒤 평균을 낸다",
    "answerIndex": 0,
    "explanation": "집계 함수는 NULL을 조용히 건너뛰므로 AVG는 채점된 3건만으로 240÷3=80을 계산한다. 코스 4섹션의 함정 ② — 미채점을 0점으로 칠지 말지는 DB가 아니라 내가 정해야 한다는 내용이다."
  },
  {
    "courseSlug": "sql-intermediate",
    "question": "\"검색이 빨라진다니 모든 컬럼에 인덱스를 걸자\"는 생각이 코스에서 '안 됩니다'라고 한 이유는?",
    "option1": "인덱스는 테이블당 한 개만 만들 수 있기 때문에",
    "option2": "인덱스를 걸면 SELECT 결과의 정렬 순서가 바뀌기 때문에",
    "option3": "인덱스가 많으면 EXPLAIN이 실행 계획을 못 세우기 때문에",
    "option4": "INSERT/UPDATE 때마다 인덱스도 고쳐야 해서 쓰기가 느려지기 때문에",
    "answerIndex": 3,
    "explanation": "인덱스는 디스크를 차지하고, 데이터를 넣거나 고칠 때마다 유지 비용이 들어 쓰기가 느려지는 읽기-쓰기 거래(trade-off)다. 그래서 코스 5섹션은 'WHERE나 JOIN에 자주 등장하는 컬럼에만' 거는 것을 원칙으로 든다."
  },
  {
    "courseSlug": "sql-intermediate",
    "question": "수십만 행의 submission 테이블에서 WHERE student_id = 7 조회가 느리다는 말을 듣고 EXPLAIN을 붙였더니 'Seq Scan on submission'이 나왔다. 코스가 알려준 다음 행동은?",
    "option1": "WHERE를 HAVING으로 바꿔 팀 단위로 거르게 한다",
    "option2": "student_id 컬럼에 CREATE INDEX를 걸까 검토한다",
    "option3": "쿼리를 트랜잭션(BEGIN~COMMIT)으로 감싸 다시 실행한다",
    "option4": "COALESCE로 student_id의 NULL을 0으로 바꿔 준다",
    "answerIndex": 1,
    "explanation": "데이터가 많은데 Seq Scan이면 책을 한 장씩 넘기는 중이라는 점검 신호이므로, 자주 검색하는 컬럼에 인덱스를 걸지 고민하는 것이 다음 단계다. 코스 6섹션의 'EXPLAIN 붙이기 → Seq Scan 찾기 → 인덱스 고민' 3단 콤보다."
  }
]
