프로그래밍/MySQL

[MySQL] SQL ZOO Numeric Examples 답 해설

모영이 2021. 3. 10. 00:21

 

NSS Tutorial - SQLZOO

FieldType ukprnvarchar(8) institutionvarchar(100) subjectvarchar(60) levelvarchar(50) questionvarchar(10) A_STRONGLY_DISAGREEint(11) A_DISAGREEint(11) A_NEUTRALint(11) A_AGREEint(11) A_STRONGLY_AGREEint(11) A_NAint(11) CI_MINint(11) scoreint(11) CI_MAXint(

sqlzoo.net

NSS 라는 National Student Survey 라는 통계를 활용한 문제인데, 솔직히 데이터가 어떻게 담겨있는지 잘 안알려줘서 풀기가 힘들다. 좀 불친절한 것 같다. 전에 문제들은 정말 퀄리티가 좋아서 아쉬워서 하는 말이다...

 

#1 Check out one row

WHERE절 AND사용

SELECT A_STRONGLY_AGREE
FROM nss
WHERE question = 'Q01' AND 
      institution = 'Edinburgh Napier University' AND 
      subject='(8) Computer Science'

 

#2 Calculate how many agree or strongly agree

WHERE절 AND사용

SELECT institution, subject
FROM nss
WHERE question = 'Q15' AND
      score >= 100

 

#3 Unhappy Computer Students

WHERE절 AND사용

SELECT institution, score
FROM nss
WHERE question = 'Q15' AND
      score < 50 AND
      subject = '(8) Computer Science'

 

#4 More Computing or Creative Students?

(Q22 AND '(8) Computer Science') OR (Q22 AND subject='(H) Creative Arts and Design')

이렇게 할 수도 있을 것 같다. 

과목별 응답자를 출력한다.

SELECT subject, SUM(response)
FROM nss
WHERE question = 'Q22' AND
      (subject='(8) Computer Science' OR subject='(H) Creative Arts and Design')
GROUP BY subject

 

#5 Strongly Agree Numbers

HINT를 클릭하면 자세히 볼 수 있는데, A_STRONGLY_AGREE가 백분율이어서 응답수를 곱해야 하고 그것을 100으로 나누어야 한다고 쓰여져있다. 솔직히 이해가 잘 안됐다.

아마 내 이해로는 응답자가 100명이고 강한 긍정 비율이 33(퍼센트)이면 33명을 출력하기 위해선 100 * (33 / 100)을 해주어야 한다. 이게 아닐까..

SELECT subject, SUM(response*A_STRONGLY_AGREE/100)
FROM nss
WHERE question='Q22'
AND (subject='(8) Computer Science' 
OR subject =  '(H) Creative Arts and Design')
GROUP BY subject

 

#6 Strongly Agree, Percentage

이번엔 비율을 출력해야 한다. ROUND 함수를 사용해서 해결하라고 했지만 아래 코드로 풀었다.

SELECT subject, SUM(response*A_STRONGLY_AGREE)/SUM(response)
FROM nss
WHERE question='Q22'
AND (subject='(8) Computer Science' 
OR subject =  '(H) Creative Arts and Design')
GROUP BY subject

 

#7 Scores for Insitutions in Manchester

이번엔 점수 백분율을 출력하면 된다.

SELECT institution, SUM(response*score)/SUM(response)
FROM nss
WHERE question = 'Q22' AND
      institution LIKE '%Manchester%'
GROUP BY institution
ORDER BY institution

 

#8 Number of Computing Students in Manchester

서브쿼리를 사용해야 한다. Q01이면서 맨체스터인 것들의 교육기관 별 총 샘플을 출력해야 한다. 여기까지는 SUM만 사용하면된다. 하지만 컴퓨터 학생 수를 출력하려면 메인 WHERE문에 컴퓨터 학생을 추가할 수 없다. 왜냐면 총 샘플을 이미 구해야하기 때문이다. x의 교육기관과 y의 교육기관이 같으면서 Q01이면서, 컴퓨터 사이언스를 듣는. 을 추가해주면 된다.

SELECT institution, SUM(sample), 
       (SELECT sample 
        FROM nss y
        WHERE subject='(8) Computer Science' AND 
              x.institution = y.institution AND 
              question='Q01')
FROM nss x
WHERE question='Q01' AND 
      institution LIKE '%Manchester%'
GROUP BY institution

 

정리하기

솔직히 표 하나만 던져줬으면 풀기 쉬웠을 거다. 막히는게 있으면 답지를 찾아서 보고 연습했다. 영어 공부의 필요성을 느끼게 되는 것 같다.