BigQuery - 연습문제 풀이 1

BigQuery

개요

인프런 강의 추천을 받게 됐고, 회사에서 현재 사용하고 있는 툴이어서 알고쓰자는 마음에 공부하게 됐습니다.


연습문제 풀이

문제1) trainer 테이블에 존재하는 모든 데이터를 보여주는 SQL을 작성해라

SELECT *
FROM `basic.trainer`; -- project name은 생략 가능 (프로젝트가 명시되어 있다면)


문제2) trainer 테이블에 있는 트레이너의 name을 출력하는 쿼리를 작성해라

SELECT
	name
FROM `basic.trainer`;


문제3) trainer 테이블에 있는 트레이너의 name, age 을 출력하는 쿼리를 작성해라

SELECT
	name,
	age
FROM `basic.trainer`;


문제4) trainer 테이블에 있는 id=3인 트레이너의 name, age, hometown 을 출력하는 쿼리를 작성해라

SELECT
	name,
	age,
	hometown
FROM `basic.trainer`
WHERE 
	id = 3; -- 강의에서는 이와 같이 들여쓰기를 진행하여 따라함.


문제5) pokemon 테이블에서 “피카츄”의 공격력과 체력을 확인할 수 있는 쿼리를 작성해라

pokemon이라는 테이블을 오늘 처음 본다고 가정하면, 아래와 같은 확인과정을 진행해야 쿼리를 작성할 수 있다.

  1. pokemon 테이블에 어떤 컬럼들이 존재하는지 확인
  2. 해당 컬럼들 중에서 ‘공격력’과 ‘체력’에 관련된 컬럼 확인 => 컬럼 이름과 매칭되지 않는다면, 질문이 필요
  3. “피카츄”라는 한글 이름이 저장된 컬럼 확인
SELECT
	attack,
	hp
FROM `basic.pokemon`
WHERE 
  kor_name = '피카츄';


문제6) pokemon 테이블에 존재하는 포켓몬 총 수를 구하는 쿼리를 작성해라

SELECT
	name,
	COUNT(*) AS cnt
FROM `basic.pokemon`
GROUP BY kor_name
HAVING COUNT(*) > 1;
-- 결과 : 0건


SELECT
	COUNT(*) AS cnt -- 확인하기 용이하도록, alias를 명시하자!
FROM `basic.pokemon`;
-- 결과 : 251건


문제7) pokemon 테이블에 세대별로 몇마리의 포켓몬이 존재하는지 확인하는 쿼리를 작성해라

SELECT
  generation,
	COUNT(*) AS cnt
FROM `basic.pokemon`
GROUP BY 
	generation; -- 강의에서 이런식으로 포맷을 작성하길래 따라해봄


문제8) 포켓몬의 수를 타입별로 집계하고, 포켓몬의 수가 10마리 이상인 타입만 남기는 쿼리를 작성해라 (포켓몬 수가 많은 순서로 정렬)

SELECT
  type1 AS pokemon_type,
  COUNT(*) AS cnt -- => null이 아님이 명확하다면, `id`와 같은 컬럼을 기입해주는게 명시적이어서 좋다고 함. 
FROM `basic.pokemon`
GROUP BY 
  type1
HAVING 
  COUNT(*) >= 10 -- cnt로 써도 됨
ORDER BY 
  COUNT(*) DESC; -- cnt로 써도 됨


References