인프런- 데이터분석을 위한 중급 SQL 문제풀이: 섹션1

르네·2023년 9월 20일
0

SQL

목록 보기
14/63

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

문제

풀이

SELECT name, population, area
FROM World
WHERE population >= 25000000 
OR area >= 3000000

배운점

  • at least니가 where 조건문에 '>=' 써주기

문제

풀이

  • 나의 풀이
SELECT *
FROM Cinema
WHERE ID % 2 = 1
AND description <> 'boring'
ORDER BY rating DESC
  • 선생님 풀이
> SELECT id, movie, description, rating
FROM cinema
WHERE MOD(id, 2) = 1  -- odd numbered ID
AND description != 'boring'
ORDER BY rating DESC

배운점

  • 2 decimal places float in the range [0, 10]
    : '0 과 10 사이의 소수점 두 자리의 실수'라는 의미
  • MOD() 함수는 나누고 나머지를 반환한다.
  • '아니다'를 구현하는 방법으면 '<>'도 있고, '!='도 있다.

문제

  • 나의 풀이
> SELECT email
FROM Person
GROUP BY email
HAVING COUNT(email) >= 2
  • 선생님 풀이
SELECT Email
FROM Person
GROUP BY Email
HAVING COUNT(Id) >= 2

배운점

  • GROUP BY 쓰면, GROUP BY의 기준 컬럼이 있고, 이 컬럼을 기준으로 해서 연산을 하고, 그 연산된 결과를 가지고 필터링할 때 'HAVING'을 써준다.
  • COUNT(email) 대신 COUNT(Id)를 써줘도 되는 이유는 HAVING 조건으로 걸러진 결과값의 모든 행의 수가 email의 행의 수와 어차피 같기 때문이다.
  • WHERE vs HAVING
    : HAVING절은 GROUP BY에서 연산한 결과물을 가지고 필터링을 할 때 사용

문제

풀이

  • 나의 풀이
SELECT Person.firstName
     , Person.lastName
     , Address.city
     , Address.state
FROM Person 
     LEFT JOIN Address ON Person.personID = Address.personID
  • 선생님 풀이
SELECT FirstName, LastName, City, State
FROM Person
     LEFT JOIN Address ON Person.personID = Address.personID

배운점

  • 한 테이블은 모든 데이터 출력하고, 다른 테이블은 데이터가 누락되어 있는데, 두 테이블을 조인해서 NULL 값까지 나타내고 싶을 때 --> LEFT JOIN 활용!
  • SELF JOIN이 아니면, AS 활용이 필수가 아니다. 그리고, AS를 활용하지 않은 이상, SELECT절에서 각 컬럼에 테이블을 따로 할당할 필요 없다.
profile
데이터분석 공부로그

0개의 댓글