SQL 질문 잘하는 방법
문제를 해결하는 두 가지 방법
- 인터넷으로 검색한다.
- 같이 공부하고 있는 사람 또는 멘토에게 물어본다.
각각 어떤 전략으로 접근해야 내가 원하는 답변을 빠르게 얻어내고 문제를 해결할 수 있을지 생각해 봅시다.
질문 전 체크리스트
SQL 초보자들이 자주 하는 실수들을 정리해 봤습니다. 아래 사항을 꼭 점검해 봅시다.
- 코드에 오탈자가 있는지 확인했나요?
- 쿼리 실행 후 에러메시지를 읽어보고 그에 맞게 조치를 취했나요?
- 문제에서 요구하는 조건을 빠짐없이 작성했나요? (WHERE절의 필터링 조건, ORDER BY절의 정렬 조건, SELECT절의 컬럼명이 정확하게 정의 됐는지 확인해 주세요!)
- 질문에 포함된 쿼리를 실행해 봤나요? (질문 사항 이외에 다른 에러가 발생하는지 꼭 확인하세요!)
- 여러 DBMS를 선택할 수 있는 플랫폼을 사용 중이라면 문법에 맞는 DBMS가 선택되어 있는지 확인해 주세요. (예를 들어, 데이터 리안의 SQL캠프 수강생이라면 solvesql에서 SQLite 대신 MySQL이 선택되어 있는지 확인해 주세요!)
구글에서 검색하기
기술 검색은 반드시 구글에 합니다. 그 이유는 네이버는 네이버 블로그나 카페 위주로 검색 결과를 보여주기 때문에 전문가의 지식보다는 초심자가 공부를 위해 남겨놓은 정보나 카페에서의 잡담이 검색 결과로 나올 확률이 높습니다.
반면 구글에 검색을 하면 관련 공식문서나 잘 구축된 기술 커뮤니티인 stackoverflow가 검색 결과로 자주 등장하기 때문입니다. 그래서 구글로 검색하는 습관을 들여야 합니다.
영문으로 검색하기
기술 문서는 한글로 쓰이거나, 영어에서 한글로 번역된 것도 물론 있지만, 영어 문서의 양이 압도적으로 많습니다. MySQL, PostgreSQL 같은 대표적인 DBMS의 웹사이트도 일부 문서의 경우 번역본이 있지만 기본 언어는 영어입니다.
구글에서 영문으로 검색을 해도 언어 설정이 한국어로 되어있으면 한글 문서들이 검색결과 상위로 올라오니 언어설정을 영어로 바꿔 놓은 것이 좋습니다. 그리고 제가 생각하기에는 "영어를 잘할 필요는 없다"입니다. 왜냐하면 어떻게 검색을 해도 구글이 찰떡같이 결과를 보여주기 때문입니다.
검색 키워드를 잘 넣기
반대로 너무 좁히는 것도 좋지 않습니다. 윈도 함수의 사용 예시를 좀 보고 싶다면 ‘postgresql window function’, ‘mysql window function’이라고 특정 DBMS를 검색어에 넣는 것보다 ‘sql window function’이라고 검색해야 더 다양한 검색 결과를 볼 수 있습니다.
신뢰할 수 있는 사이트를 클릭하기
언제 쓰였는지 확인하기
질문답변방
슬랙 검색 이용
질문 템플릿
만약 비슷한 질문을 한 사람이 없으면, 아래 항목들을 채워 질문을 올려주세요.
1. 질문과 관련된 강의 영상 제목과 시간대 또는 문제 링크
- 강의 영상 제목과 시간대 O, 문제 링크 O
- 노션 수업 자료 링크 X: 한 수업 자료에 많은 내용이 들어있기 때문에 어떤 내용에 대한 질문인지 파악하기 어려워요.
- 코드 복사 붙여넣기 O
- 스크린샷 X, 사진 X: 코드의 에러를 확인하기 위해서 답변자가 코드를 실행해봐야 하는데 스크린샷이나, 사진으로 올리면 긴 쿼리를 따라서 다시 작성해야 하는 번거로움이 있어요.
3. 문제 상황 서술
- 기대했던 결과와 내 시도를 통해 얻은 결과의 차이를 중심으로 적어 답변자가 문제 상황을 정확하게 파악할 수 있어요.
4. 기타 추가 설명
- 구글 검색어, 참고한 자료 링크 등
답변자의 편의를 위해서가 아니라, 질문자가 문제를 빠르게 해결하기 위해서 정확한 질문을 하는 것은 중요합니다. 좋은 질문과 답변을 주고받는 환경에서 가장 빠르게 성장할 수 있다고 생각합니다.
뻔하지만, 결국 스스로 해봐야 는다
처음 SQL 수업을 듣는 수강생분들은 '똑같이 막막하고 무수하게 실패하겠구나.’하고 생각합니다. 결국에 성장하는 사람은 이 막막함을 견디고 계속 시도를 해보는 사람인 것 같아요. 화면을 째려보면서 오류가 도대체 어디 있나 찾아도 보고, 답답함에 ‘아~ 도대체 이게 뭐야’ 혼잣말도 해보고, 하루 종일 찾은 오류가 오타라는 것을 알고 허망한 웃음도 지었다가, 구글에 검색도 해보고, 스터디 팀원들한테 물어도 보고, 질문답변방에 질문도 남겨보고 하는 그 과정에서 끊임없이 성장하는 거예요. 그리고 그 과정을 지나다 보면 어느 순간 ‘어? 내가 좀 능숙해졌네?’하는 마법 같은 순간도 발견하게 됩니다.
SQL 공부
조회한 데이터에 아무 값이 없다면 어떻게 해야 할까?
데이터를 사용 시 사용할 수 없는 데이터가 들어가 있거나, 값이 없는 경우가 있습니다. 그때 방법을 배워보겠습니다
- 첫 번째, 없는 값을 제외해 주기
- Mysql에서는 사용할 수 없는 값일 때 해당 값을 연산에서 제외해 줍니다. → 0으로 간주
- MySQL에서 not given 같은 계산할 수 없는 값은 0으로 간주하여 연산합니다.
- 데이터를 정리할 때 무조건 사용할 수 없는 값은 널(null)을 사용해 제외하는 것이 좋습니다.
- 사용할 수 없는 값을 NULL을 통해 제거하여 정리하고 싶을 땐 IF문으로 이용한 널문 (nullcheck)을 해주면 됩니다.
- 이런 방법으로 null을 처리를 한다면 데이터를 간결하게 정리할 수 있으며, 무결성 유지와 데이터 분석에도 유용하게 쓰일 수 있다.
- 즉 평균 rating을 구하는 쿼리를 아래와 같이 작성했을 때 실제 연산에 사용되는 데이터는 다음과 같습니다
select restaurant_name, avg(rating) average_of_rating, avg(if(rating<>'Not given', rating, null)) average_of_rating2 from food_orders group by 1 |
- 두 번째, 다른 값을 대신 사용하기
- 사용할 수 없는 값 대신 다른 값을 대체해서 사용하는 방법이 있습니다.
- 데이터 분석 시에는 평균값 혹은 중앙값 등 대표값을 이용하여 대체해주기도 합니다.
- 데이터 분석에서 null은 누락된 정보를 의미하기 때문에. 대체할 값은 신중하게 선택해야 합니다.
- null 대체 값과 함께 데이터 품질에 관한 현실적인 문제도 함께 고려하여 대체 방법을 결정해야 합니다
-
컬럼 값이 null일 경우, 대체 값을 지정하여 테이블을 조회할 수 있습니다.
- 다른 값으로 변경하고 싶을 때, 다음 두 개의 문법을 이용할 수 있습니다.
- 다른 값이 있을 때 조건문 이용하기 : if(rating>=1, rating, 대체값)
- null 값일 때 : coalesce(age, 대체값)
- null을 다른 값으로 대체한 쿼리문을 실행하면 다음과 같습니다. customer 테이블에 없는 데이터 중에 age 만 20으로 채워진 것을 확인하실 수 있습니다.
- null값을 가진 데이터만 출력하기 위해선 is null 명령어를 사용합니다.
- WHERE절을 활용하여 빈 데이터를 제외하기 위해 WHERE절에 'b.customer_id is not null' 조건을 사용합니다.
select a.order_id, a.customer_id, a.restaurant_name, a.price, b.name, b.age, coalesce(b.age, 20) "null 제거", b.gender from food_orders a left join customers b on a.customer_id=b.customer_id where b.age is null |
조회한 데이터가 상식적이지 않은 값을 가지고 있다면 어떻게 해야 할까?
분석을 하다 보면 상식적이지 않은 데이터가 있습니다 이럴 때 어떻게 해야 할지 배워봅시다
- 조건문으로 값의 범위를 지정하기
-
데이터의 범위를 지정하고 연산(합계, 평균)을 하면 특이한 값들을 제외하고 일반적인 값으로 대체하여 사용할 수 있습니다.
- 분석에 사용할 데이터에 대한 값의 범위를 지정하기 위해 조건문 활용합니다
- 위의 나이의 경우 아래와 같은 범위를 지정해 줄 수 있습니다.
- 15세 미만은 15세로, 80세 이상은 80세로 맞추고, 그 외의 경우에는 원래 나이 값을 유지하여 데이터를 정리합니다.
-
예를 들어 32세와 같은 경우도 동일하게 32세로 값이 표시되며, 음식을 주문하는 데에는 어울리지 않는 6세와 같은 값도 15세로 통일되었습니다.
- 또, 91세와 같은 경우에는 프로그램에서 가장 높은 값을 80으로 제한해서 re_age에 80으로 나오게 되었습니다.
-
select customer_id, name, email, gender, age, case when age<15 then 15 when age>80 then 80 else age end "re_age" from customers |
SQL 질문하는 방법이 결국 본인이 문제해결능력으로 이어지는 점이 신기했으며 구글사용 시 언어 설정을 영어로 바꾸고 검색할 때는 최신일자인지 확인해야 한다는 점이 흥미로웠다.
SQL 공부는 null에 대한 방법을 자세하게 알 수 있었으며 제외하거나 대체값을 주면 되고 데이터가 상식적이지 않을 때 범위를 지정하는 방법이 새롭게 배웠던 내용이다.
'자기계발 Diary' 카테고리의 다른 글
오늘의 공부Day_11(데이터를 쉽게 찾고 잘 활용할 수 있는 기반을 만드는, 데이터 분석 엔지니어) (0) | 2024.11.20 |
---|---|
오늘의 공부Day_10(데이터 분석가에게 코딩테스트가 필요할까?,SQL공부) (4) | 2024.11.19 |
오늘의 공부day_8(데이터 분석으로 유저의 마음을 읽는 서비스가 되려면,SQL공부) (4) | 2024.11.13 |
오늘의 공부day_7(주니어 데이터사이언티스트에게 하고 싶은 이야기들) (3) | 2024.11.12 |
오늘의 공부day_6(데이터 분석이란 무엇일까?,SQL) (4) | 2024.11.11 |