교재
https://www.inflearn.com/course/bigquery-%ED%99%9C%EC%9A%A9%ED%8E%B8/dashboard
한달만에 돌아와서, 1일차 내용을 복습하고 시작. 정리해두길 잘했다.
오늘은 연습 문제를 풀면서 UNNEST 방법과 구조체에 대한 이해를 높여보자.
https://console.cloud.google.com/bigquery
연습 문제를 기반으로 쿼리를 재구성했다
1. 브랜드별로 판매하는 제품군(products)을 UNNEST 해서 보자
아래와 같은 데이터가 있다고 가정한다.
결과적으로 내가 얻고 싶은 데이터는 다음과 같다.
1일차 내용를 참고해서 쿼리를 날려본다.
결과적으로 내가 UNNEST 했던 결과를 product_dt 라고 선언해놓고 SELECT 쪽에 쓰지 않은게 문제였다.
그리고 기존의 products 를 SELECT에서 제외해야 한다.
products를 그대로 두면, ARRAY가 안 풀린 내용이 그대로 조회되기 때문이다.
그런데 왜 브랜드B가 먼저 나오는지 모르겠다.
원본 데이터가 브랜드B부터 시작하기 때문인 것 같은데..
id를 브랜드 A, B, C에 따라서 1, 2, 3으로 지정했는데 왜 순서대로 정렬되지 않는지 모르겠다.
이 부분은 추가 검색해서 댓글로 올려두자.
UNNEST 하는 방법은 두 줄로 요약 정리한다
1. CROSS JOIN UNNEST(ARRAY_COLUMN 명칭) AS 새로운 명칭 코드를 마지막 줄에 작성
2. SELECT 쪽에서 새로운 명칭 사용하고, 기존 컬럼 명칭은 지운다.
2. 브랜드별 담당 매니저와 연락처를 추출해보자
결론적으로 내가 얻고 싶은 데이터는 다음과 같다.
일단 1번 내용을 참고해서 쿼리를 만들어 돌려본다.
에러가 났는데.. 무슨 소리인지 잘 이해할 수가 없다.
AI에게 물어보니까 명쾌하게 답을 준다.
에러가 다시 났다.. 안된다고 하니까 뱉어준 새로운 쿼리문.
성공했다! 쿼리를 다시 읽어보니 이해가 된다.
manager.name과 manager.mobile 데이터가 있었으니까, CROSS JOIN UNNEST를 각각 다 작성하는 것이 아니라,
CROSS JOINI UNNEST(atest.manger) 하면 되는 것이다!
그럼 이제 다시 강의를 틀어, 정답이 맞는지 확인했다.
이럴수가. 훨씬 더 짧고 간결한 쿼리로 동일한 결과가 나온다.
쿼리의 세계는 정말 깊고 넓어서 배울 점이 너무 많은 것 같다.
특히 ARRAY, STRUCT 구조를 이해하고 쿼리문을 어떻게 작성하는지 알게 되면, 저렇게 짧은 문장으로도 원하는 값을 얻을 수 있다는 것이 나의 호기심을 자극한다.
이번에도 2일차까지 오는 기간이 길고 힘들었지만, 이제는 조금 집중해서 SQL을 알아가보려고 한다.
3일차는 내일 합니다! (선언)
데이터 구조를 이해하고 언어를 배우면 효율적으로 처리할 수 있습니다
'SQL 코딩 입문' 카테고리의 다른 글
SQL 중급: 4일차 (1) | 2024.11.23 |
---|---|
SQL 중급: 3일차 (0) | 2024.11.17 |
SQL 중급: 다시 1일차 (3) | 2024.10.26 |
SQL 중급: 1일차 (0) | 2024.03.20 |
완강, 또 다른 시작 (0) | 2021.05.05 |