인프런 커뮤니티 질문&답변

wasd7595님의 프로필 이미지
wasd7595

작성한 질문수

초보자를 위한 BigQuery(SQL) 입문

2-6. 연습 문제 13~17번

2-6.연습문제 17번

해결된 질문

작성

·

39

0

안녕하세요. 열혈 수강자 이지수입니다 : )

문제가 하나씩 풀리니 넘 재밌고 뿌듯합니다 ㅎㅎ

17번 문제에서

풀어준 포켓몬 수를 B
전체 포켓몬 수를 A로 두었는데요

COUNT IF B/A 이런식으로 축약해서 연산할 수는 없나요?

감사합니다.

SELECT trainer_id, 

COUNTIF(status="Released") as B , #풀어준 포켓몬의 수

COUNT(pokemon_id) as A, #전체 포켓몬의 수 

COUNTIF(status="Released")/COUNT(pokemon_id) as released_ratio 

FROM basic.trainer_pokemon 

GROUP BY trainer_id 

HAVING released_ratio >=0.2

답변 1

0

카일스쿨님의 프로필 이미지
카일스쿨
지식공유자

안녕하세요. 열혈 수강자라니 기쁘네요! 계속 강의 잘 수강해보셔요!

 

질문이 약간 헷갈리는데 제가 이해한게 맞을까요?

 

SELECT 
  trainer_id, 
  COUNTIF(status="Released") as B , #풀어준 포켓몬의 수
  COUNT(pokemon_id) as A, #전체 포켓몬의 수 
  B/A as released_ratio 
FROM basic.trainer_pokemon 
GROUP BY trainer_id 
HAVING released_ratio >=0.2

이렇게 실행하고 싶다는 의미일까요?

"COUNT IF B/A 이런식으로" 라는 표현이 구체적이지 않아서 헷갈리네요

 

실행을 해보시면, 실행이 안될거에요. 쿼리는 SELECT문이 마지막에 실행되는데, 실행하는 시점에 A와 B가 무엇인지 모릅니다. 그래서 서브쿼리로 감싸서 실행을 해야합니다. SELECT의 별칭은 그 안에 있는 쿼리에선 사용할 수 없습니다

SQL 실행 순서 : FROM - WHERE - GROUP BY - HAVING - SELECT - ORDER BY

SELECT에서 사용한 별칭은 ORDER BY에서만 사용이 가능하고, 그 외에 사용하고 싶다면 아래처럼 서브쿼리로 감싸서 실행해야 합니다.

 

SELECT
  trainer_id,
  B/A as released_ratio 
FROM (
  SELECT 
    trainer_id, 
    COUNTIF(status="Released") as B , #풀어준 포켓몬의 수
    COUNT(pokemon_id) as A, #전체 포켓몬의 수 
  FROM basic.trainer_pokemon 
)
GROUP BY trainer_id 
HAVING released_ratio >=0.2

 

이렇게는 실행이 됩니다.

wasd7595님의 프로필 이미지
wasd7595

작성한 질문수

질문하기