인프런- 데이터분석을 위한 중급 SQL 문제풀이: 섹션3(틀림)

르네·2023년 9월 21일
0

SQL

목록 보기
16/63

인프런 <데이터분석을 위한 중급 SQL 문제풀이> 강의에서 나온 문제를 풀이한 과정을 정리했습니다.

문제(틀림)

풀이

  • 나의 틀린 풀이
SELECT DISTINCT city
FROM STATION
WHERE city NOT LIKE 'A%' 
   OR city NOT LIKE 'E%' 
   OR city NOT LIKE 'I%' 
   OR city NOT LIKE 'O%' 
   OR city NOT LIKE 'U%'
   OR city NOT LIKE '%a' 
   OR city NOT LIKE '%e' 
   OR city NOT LIKE '%i' 
   OR city NOT LIKE '%o' 
   OR city NOT LIKE '%u'

: 쿼리문 자체는 문제가 없으나, 해커랭크에서 채점 통과가 안 된다.

  • 선생님 풀이
SELECT DISTINCT city
FROM STATION
WHERE LEFT(city, 1) NOT IN ('A', 'E', 'I', 'O', 'U')
OR RIGHT(city, 1) NOT IN ('A', 'E', 'I', 'O', 'U')

배운점

  • LEFT(), RIGHT() 함수를 처음 배웠다.
LEFT(city, 1) NOT IN 'A'

이 쿼리문은 city 테이블의 문자열에서 처음 문자가 'A'가 아니라는 의미다. RIGHT는 문자열의 마지막 문자를 가리킨다.

  • 문제를 꼼꼼히 읽자!
    'either do not start with vowels or do not end with vowels'라고 했다. 'either A or B'는 A 또는 B 둘 중 어느 하나를 의미한다. 그러니 연산자는 'AND'가 아닌 'OR'를 써야한다.

  • NOT IN ('A', 'E', 'I', 'O', 'U')
    : A, E, I, O, U를 'AND'로 연결한다고 이해했다. 이 부분은 여전히 헷갈린다. 차후 꼭 다시 풀며 제대로 이해하고 넘어가야 한다!


문제

풀이

SELECT MAX(population) - MIN(population)
FROM CITY

배운점


문제

풀이

SELECT TRUNCATE(SUM(LAT_N), 4)
FROM STATION
WHERE LAT_N > 38.7880
AND LAT_N < 137.2345

배운점

  • 'greater than'은 초과, 'less than'은 미만으로 '='를 포함하지 않음.
  • 소수점 떨구기 -> TRUNCATE()

문제(틀림)

https://www.hackerrank.com/challenges/full-score/problem?isFullScreen=true

풀이

SELECT H.hacker_id
     , H.name
FROM Submissions S
     INNER JOIN Hackers H ON S.hacker_id = H.hacker_id
     INNER JOIN Challenges C ON S.challenge_id = C.challenge_id
     INNER JOIN Difficulty D ON C.difficulty_level = D.difficulty_level
WHERE S.score = D.score
GROUP BY H.hacker_id, H.name
HAVING COUNT(DISTINCT S.submission_id) > 1
ORDER BY COUNT(DISTINCT S.submission_id) DESC
       , H.hacker_id

배운점

  • 풀이 전체의 핵심은 중심이 되는 하나의 테이블을 선정해서, 그 테이블을 중심으로 각 테이블을 하나씩 INNER JOIN함으로써 테이블 전체를 연결해주는 것이다. 그렇게 해주고, GROUP BY절을 이용해 조건을 걸어주면서 문제를 풀어나가면 된다.
  • 테이블이 여러개 제시되는 문제나 JOIN 문제는 아직 어렵다. 이 문제는 여러번 풀어보고 더 깊게 이해할 필요가 있다.
profile
데이터분석 공부로그

0개의 댓글