brunch

You can make anything
by writing

C.S.Lewis

by 심씨 Mar 28. 2024

ChatGPT에게 SQL 쿼리를 물어봤다.

생성형 AI (Chat CPT)와 함께하는 SQL

활용 툴 : Google BigQuery

활용 데이터 : thelook_ecommerce (BigQuery 공개 데이터)


원래는 프로그래머스 사이트에서 연습문제를 풀어보는 형태로 공부해보려고 했으나.. 너무 명확하게 뽑아야 하는 내용이 작성되어 있어서 공부하는 느낌이 아니었다. 찾다 보니 구글 BigQuery에서 제공하는 공개 데이터셋이 있어, 이를 활용하여 공부해 보기로 했다. 


최대한 실제 활용하는 상황과 유사하게 고민해보려고 했고, ChatGPT에게 물어보는 과정과 답변 도출 방식 그리고 배운 점을 위주로 정리할 예정이다.






첫 번째 스텝 : 데이터를 살펴보자

직접 쌓은 데이터가 아니기 때문에 테이블마다 어떤 데이터를 담고 있는지 확인해야 한다. 총 7개의 테이블로 구성되어 있다. 순서대로 유통센터 / 주문상태 / 재고상품 / 주문상품 / 주문 / 상품 / 사용자로 구분되어 있다.(정확하진 않다)


빅쿼리 thelook_ecommerce의 테이블


각 테이블마다 어떤 데이터를 포함하고 있는지도 반드시 확인해주어야 한다. 테이블이 분리되어 있기 때문에, 필요한 데이터를 확인하려면 어떤 테이블을 확인해야 하는지 봐야 하기 때문이다. 



두 번째 스텝 : 상황 가정하기

지금부터 나는 thelook의 마케터다. 이번 달 결제 방식 개선 작업이 있어 4일 동안 주문을 못하는 이슈가 있었다. 그동안 장바구니에 상품을 담아둔 고객은 구매 니즈가 높았지만, 구매하지 못한 고객이라고 판단하여 감사 쿠폰을 발송하려고 한다. 해당 기간 장바구니 고객 리스트와 email이 필요하다. 단, 이번 쿠폰은 29세까지만 적용 가능한 쿠폰이다. 


필요 항목 : 고객 이름 (성, 이름) / 나이 / email / 취소여부
조건 : 장바구니 고객 / 10월 28일 ~ 31일 / 29세 이하



세 번째 스텝 : 데이터 추출

사용자 정보를 담은 user 테이블과 주문상태를 보여주는 events 테이블을 활용해야 한다. 둘의 공통되는 값은 id 컬럼으로 이 값을 활용하면 될 것 같다. 챗 GPT에게 물어보자. 


두 개의 테이블이 있어

bigquery-public-data.thelook_ecommerce.events 테이블은
id, user_id, created_at, event_type 컬럼으로 구성되어 있어.

bigquery-public-data.thelook_ecommerce.users 테이블은
 id, first_name, last_name, email, age 컬럼으로 구성되어 있어.

2023년 10월 28일부터 2023년 10월 31일 사이에 event_type이 cart인 회원을 구해야 돼.
id, first_name, last_name, age, email, event_type, created_at 순으로 데이터를 뽑아줘.
대신, 나이는 29세 이하인 사람들만 필요하고, 날짜 오름차순 기준으로 정렬해 줘.


GPT4 이상의 버전을 쓰면, csv를 업로드하거나 DB를 연결해서 더 편하게 쓸 수 있는 것으로 안다. 아직 유료 버전을 쓰고 있지 않기 때문에.. 최대한 자세히 물어봤다. (적용 범위가 넓어지면 결제해도 좋을 듯하다)


GPT가 짜준 코드


엔터를 누르자마자 바로 쿼리문을 작성해 줬다. 실제 빅쿼리에 붙여 넣고 실행해 보니 데이터가 추출됐다. 추출된 데이터를 보면서 수정이 필요한 부분은 추가적으로 질문하면 된다. 예를 들어, 중복 값은 제거해 줘. 또는 일자 표기를 2023-10-28과 같이 바꿔줘. 가 있다.

물론, 한 번에 정확한 쿼리문이 나오지 않는 경우도 있다. 파일을 업로드한 것이 아니라 내가 입력한 데이터만 가지고 쿼리문을 작성하기 때문에 한계가 있다. 그럴 땐 당황하지 않고, 오류 문구를 알려주거나 데이터를 쿼리 조건을 줄여가면서 원인을 찾으면 된다. 최종 쿼리문은 아래처럼 나왔다.



GPT가 짜준 코드 (수정본)



네 번째 스텝 :  정합성 비교

위 쿼리문이 정확한 데이터를 추출했는지 확인하려면 검증이 필요하다. 검증을 해줄 전문가가 없으니 몸이 조금 고생해야 한다. 데이터를 구글 스프레드시트로 받아 직접 조합해 봤다. 스프레드시트에서도 VLOOKUP 함수와 피벗테이블을 잘 활용하면 어렵지 않게 구할 수 있는 데이터다. (다만, 데이터의 크기가 클수록 다루기가 쉽지 않다.) 데이터 정합성에는 문제가 없다. GPT 만세!



마지막 스텝 : 공부

원하는 데이터 추출을 해봤으니, 어떤 문법을 활용한 건지 뜯어보자. GPT는 친절하게 쿼리문과 해석을 함께 알려준다. 조건을 추가할 때도 '어떻게 이 함수를 활용하는지' 같이 알려준다. 이런 내용들을 참고하면 어떤 상황에 어떤 명령어를 활용해야 하는지 감을 잡을 수 있다.


SELECT : 보고 싶은 컬럼
FROM : 원천이 되는 테이블
JOIN : 두 개의 테이블을 연결 (VLOOKUP 함수 느낌) ON : 키 값
WHERE : 조건
ORDER BY : 정렬 순서
DISTINCT : 중복 제거
FORMAT_TIMESTAMP() : 날짜/시간 형식 변환


하나씩 조건을 넣고 빼고 하면서 나오는 결과를 보면서 느낀 점은, 상당히 편하다. 다루는 데이터 용량이 꽤 되는데도 뚝딱하면 데이터가 추출된다. 아직 입력 = 출력 시스템이 조금 어색하긴 하지만 익숙해지면 편할 것 같다. 


이 데이터셋을 가지고 조금씩 데이터를 뽑아봐야겠다. 

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari