Oxygen Cherry - Pencil
본문 바로가기

새싹 데이터 분석 교육 (24.05.13~24.08.16)/TIL

SQL 데이터 분석 프로젝트 2일차 - 0712

728x90

SQL 프로젝트 2일차

❇️ 오늘 배운 내용 
1. 데이터 전처리 일부
2. 가설 검증을 위한 쿼리 작성 
3. 엑셀로 일부 시각화 

 

미완. 수정될 수 있음. 

 

 

주요 개념

 

WITH            
             

 


오전 강의 

 

 

 

 

 

 

 

| 소제목

요약

 

  • 전처리 

업데이트하는 거 내가 쓰려다가 팀원이 한 거 긁어옴 

 

 

erd 관계도 정립 

-- 지역별 그거 안해도 된다고 함 

기본키 외래키 외에 몰라도 된다고 함. 

 

 

 

마케팅, 판매 쪽으로만 가지 말고 고객 입장에서도 고려해보자 

컷오프 

토탈피킹

오더피킹

 

 

null값 있어야 할 것과 없어도 될 것 구분 

다른분들이 구해서 갯수 적어놓으심. 

 

 

기본키 고유값 1 2 3 4 로 변경 ?

안필요할 거 같아서 일단 안함. 

 

 

제품명 외 번역할 수 있는 부분 번역 

 

 

용량에 따라 로컬 파일이 아닐 수도 있으니... 

데이터 파일 위치 옮길 때 대처법 

 

파이썬은 불러오는 파일 경로를 입력해야 되어서 어디에 저장하는지가 중요했다. 

경로가 '/하뇨니/꺄뿌삐쀼/분떡자료드으을/dataset' 이러면 곤란하니까;;

 

SQL은 한번 불러와서 데이터베이스 안에 저장해놓으면 일일이 경로 안쳐도 되어서 편함. 

근데 문제는... 폴더 이동되어도 마찬가지인가? 

 

 

 

  • 발표

 

SQL_PJT_SELECTALL_DAY2_발표자료_0712 (1).pptx
0.41MB

원본

 

 

SQL_PJT_SELECTALL_DAY2_발표자료.pptx
0.66MB

꾸민 것 

 

 

 

발표자료 꾸몄다 . 

 

 

 

 

ㄹㄹ

 

 

노션 pc 앱 설치 

 

 

가설 검증을 하기 위해 필요한 컬럼이 뭔지 

내 개인페이지

 

왜냐면 탭 여러 개 키는... 

 

 

그다음 데이터 구조 정리된 거 보면서 

어케 할지를...

 

 

 

모든 열의 NULL 갯수를 한번에 보기 

 

이 얘기 나오길래 급 꽂힘;;

 

 

 

쉬운 방법 (노가다) 

 

 

 

응 이미 알고 있었어... 

실제로 질무넹도 막... 어 (캡쳐) 

 

 

but. 

 

방법1. 

null 값, 테이블 정보 관련 함수 더 찾아보기 

information_schema 찾아보기 

 

 

 

방법2. 디비버 기능 뜯어보기 

 

 

방법 3

 

COALESCE 로 NULL 값을 특정 값으로 변경하고 

LIKE로 검색. LIKE를 전체 테이블에서 검색할 수 있는 방법 찾기 

LIKE로 NULL은 검색 안되는 거 같으니... 사실 LIKE로 검색할 바에는 걍 웨얼해서 찾음녀 되잔아 

근데 NULL은 부분 패턴 일치도 아닌데 LIKE가 맞나? 

 

정규 표현식이 답인가...?? 

 

 

방법4. 전문가가 만들어놓은 프로시저 활용 

 

https://blog.naver.com/sqlmvp/220499723028 

 

SQL Server 특정 테이블의 모든 컬럼에서 문자열 찾기

SQL Server 특정 테이블의 모든 컬럼에서 문자열 찾기   Version : SQL Server 2005, 2008, ...

blog.naver.com

여기서 프로시저 만들어 놓으셨는데 

이러면 like로 걍 검색할 수 있음 공백을 치환하기만 하면 ㅇㅇ 

 

문제는 

어케 적용해야 하는지?

내 거 버전이랑 맞는지?

이 분 블로그에 최신 버전용 프로시저 글 있는지? 

 

 

 

 

방법 5 

 

여기 글에서 테이블의 특정 테이블의 모든 컬럼 커멘트 조회가 있다고 함. 

https://wms0603.tistory.com/10 

 

[SQL] 특정 테이블의 모든 컬럼 및 코멘트 조회

특정 테이블의 모든 컬럼 조회 1. SELECT * FROM COLS WHERE TABLE_NAME = '테이블명'; SELECT * FROM COLS WHERE TABLE_NAME = 'EMP'; 2. SELECT * FROM ALL_TAB_COLUMNS WHERE TABLE_NAME = '테이블명'; SELECT * FROM ALL_TAB_COLUMNS WHERE TABLE_NAM

wms0603.tistory.com

근데 안먹힘 . 왜?? 오라클 쓰시나? 

 


테이블에서 검색한다는데 이거 어케 쓰는지... 왜 안먹히는지.. 이거 NULL값도 검색 가능하려나... 

SELECT * FROM ALL_COL_COMMENTS WHERE TABLE_NAME = '테이블명'; 

 

FROM 뒤에 붙는 ALL_COL_COMMENTS ?? 

--

 

sql 문 : 테이블의 전체 칼럼 이름 조회 하는 법 

여기 글에서 말하는 '테이블의 모든 컬럼명 검색'

select column_name from information_schema.columns where table_name = 'order_reviews'

이거랑

 

SELECT * FROM ALL_TAB_COLUMNS WHERE TABLE_NAME = '테이블명';

SELECT * FROM USER_TAB_COLUMNS WHERE TABLE_NAME = '테이블명';

이거랑 구조가 비슷한 거 보니까 

 

이런 방법도 분명 있는 모양인데.. 

 

 

--

ALL_TAB_COLUMNS , USER_TAB_COLUMNS 가 내 거 버전이나 디비버나 MYSQL에선 안먹히나? 

아님 USER_TAB.COLUMNS 여야 하나? 

 

information_schema 인자 중엔 NULL값만 추려주고 세주는 거 없는지? 

 

FROM 뒤에 테이블명 말고도 붙을 수 있는 함수들?인자들? 술어들? 알아보면 좋을듯. 

 

개발자 커뮤니티에 물어도 될 것 같고. 

 

 

 


오후 강의 

 


|
내가 한 것 

요약

 

 

뽑은 결과 

 

 

  • 프로덕트 선정

일단 대충 적어 지금 시각 밤 10시 넘었어 큰일났어 

 

  • 물건 제목의 글자수 대비 주문 건수와 제품수, 주문 건수 대비 제품수 배수 
  • 제품 당 구매 횟수와 구매 횟수의 횟수와 그 비율- 시각화는X 
  • 한번에 주문한 물품 수와...뭐시기 < 차이가 너무 많이 나는디? 
  • 그외 다른 거... SQL 보면서 확인해야 ;; 

 

 

 

무언가를 카운트한 걸로다가 평균 내고 뭐 하고 뭐 하기 

 

 

  • WITH 문 
WITH [ 별명1 ] [ (컬럼명1 [,컬럼명2]) ] AS (
    SUB QUERY
)[, 별명2 AS ... ]
MAIN QUERY

WITH [ 별명 ] AS ( SUB QUERY )    [SQL] WITH문

 

 

 

 

  • 프로덕트 선정

 

 

| 기타 

요약 생략?

 

 

  • 모든 컬럼 이름 한눈에 보기 

select column_name from information_schema.columns where table_name = 'order_reviews'

 

이 방법은 특정 테이블 컬럼 명 보는 것보다 

전체 테이블에서 컬럼 이름 검색하고 싶을 때 유용하다. 

만약 한 데이터 베이스 안에서 보고 싶다면 뷰 정보해가지고 관계도 보는 게 낫지 않을까? 

 

전체 테이블의 컬럼 이름 정보를 보려면

select column_name from information_schema.columns;

출처: https://wotres.tistory.com/entry/sql-문-테이블의-전체-칼럼-이름-조회-하는-법 [Carl's Tech Blog:티스토리]

 

 

테이블 하나의 컬럼명 모두 보려면 사실 이게 더 빠름. 

 

 

한눈에 볼 수 있도록 쫙 출력해주면 편하겠지만... 

 

 

+) 이렇게도 할 수 있다는데 어카는지 모름 

 

SELECT * FROM ALL_TAB_COLUMNS WHERE TABLE_NAME = '테이블명';

SELECT * FROM USER_TAB_COLUMNS WHERE TABLE_NAME = '테이블명'; 

https://wms0603.tistory.com/10 

 

 

 

  • 상위 N개만 보기 - 나중에 비교 모을 때 정리하라고 적어놓은 것 

 

파이썬은 그룹바이.헤드(N)

중복값 없으면 그룹바이 안해도 됨 핵심은 헤드 

아님 유니크.헤드인가 

 

SQL은 오덜바이해서 정렬 후 

리밋 N 걸어놓으셈. 

중복값은 그룹바이해서 묶거나 디스틴트(?) 술어 달아놓으셈. 

근데 그룹바이 해서 딱 그 값만 뽑을 수 있...던 거 같은데? 

그룹바이 할 거면 디스틴트 뭐시기가 더 쉽겠지만은 

 

 

 

  • 팀원이 짠 코드 퍼오기 
ALTER TABLE orders
ADD COLUMN delivery_date_difference INT;

UPDATE orders
SET delivery_date_difference = DATEDIFF(order_delivered_customer_date, order_estimated_delivery_date);

 

 

SELECT
    c.customer_city,
    ROUND(AVG(o.delivery_date_difference), 0) AS avg_delivery_date_diff,
    COUNT(o.delivery_date_difference) AS count_city
FROM
    orders o
INNER JOIN
    customers c ON o.customer_id = c.customer_id
GROUP BY
    c.customer_city
HAVING
    COUNT(o.delivery_date_difference) >= 30
ORDER BY
    avg_delivery_date_diff DESC

 

 

평균 무게 당 배송 소요일 구하신 거 보니까 

상위 N개인 각각의 카테고리 - 무거운, 배송 긴 

그리고 브라질의 산업 특성이랑 지역에 공장 있는지랑 수입에 의존하는 카테고리 있는지 

 

배송 소요일 - 평균무게 하면 어떨까 싶은 

 

 

 

  • 서브쿼리 오류를 차차 정복해라 

서브쿼리를 능수능란하게 쓰려면 자주 나오는 오류를 모아서 알아놔야 함. 

잘 모아서 기록해놓자. 

 

그리고 내가 쳤던 오류 코드들 뜯어보면서 내가 자주 하는 실수가 무엇인지 파악하고 

나중에 쿼리 문법 정리해놓을 때 함께 기록하자. 

 

그리고 파이썬 때도 그렇지만... 활용 잘하려면 개념을 잘 알아야 함... 

서브쿼리와 집계함수의 개념을 똑띠 알자... 

 

즉..

  1. 공식문서 같은데서 서브쿼리 등의 개념을 팍팍 알기 
  2. having 절 서브쿼리 등 절마다 쓸 때 차이점과 이유 같은 거 파악하기 
  3. 자주 내는 오류 기록해놓기 (나중에 찾아서 정리할 수 있게) 

 

--- 

Subquery returns more than 1 row

에러 원인 : 쿼리 구문에는 오류가 없지만, 서브쿼리에서 1개 이상의 값이 반환되는 것이다.

 

--- 

Operand should contains 1 column(s) 에러는 Error Based Sql Injection을 진행하는 과정에서 발생하는데

주로 where절에서 서브쿼리를 사용했을 때 발생한다. 

 

에러를 해석해보자면 1 = (select 1, 2 from dual) 라는 구문이 있을 때 왼쪽에서는 1개의 column인데 오른쪽은 2개의 column이 서브쿼리의 결과로 나온다. 이 때 왼쪽의 컬럼의 갯수가 1개라는 부분이 에러에 드러나는 것이다. 

 

조금 더 생각해보면 row(1, 1) = (select 1, 2, 3 from dual) 의 경우 왼쪽의 컬럼의 수가 2개기 떄문에

Operand should contains 2 column(s) 라는 에러가 발생할 것이라는 것을 예상해볼 수 있다.

 

 

때문에 에러기반 Sql Injection을 진행하면서 위와같은 에러를 보게 될 경우.

row(1, 1) 와 같은 함수를 통해서 컬럼수를 일치시켜줘서 해결이 가능하다.

https://ch4njun.tistory.com/88 

 

+ 지피티가 알려준 거 

WHERE (order_id, order_item_id) IN ( SELECT order_id, MAX(order_item_id) FROM order_items GROUP BY order_id )

 

따봉 지피티야 고마워! 

 

 

💠 에러 정리해놓은 블로그 어디 없나? 

 

 

  • 강사님 추천 
이력서 작성 서비스 공유

커리어 프로필 - 서핏 (surfit.io)

 

서핏을 활용해서 이력서를 작성하면 디자인(포맷)은 신경 쓸 필요 없이, 
정보만 입력해도 깔끔한 이력서를 얻을 수 있어서 추천드립니다. ( 이력서를 PDF다운로드, URL 공유 가능)


서핏에서 제공하는 디렉토리 서비스 (서핏 디렉토리 - 함께 성장하는 커리어 커뮤니티 (surfit.io)) 를 사용해서
다른 사람들의 이력서도 볼 수 있으니 구경 해보세요~

 

 

 


 

여담

 

 

 

 

 

 


 

[회고]

 

 

나 제목에 맨날 

[성동2기 전Z전능 데이터 분석가] 0622 

이러던 거 

처음에 가이드에서 붙이라고 해가지고 계속 붙였던 건데 사실 비효율적이라고 생각해. 

제목은 배운 내용이어얒...! 

 

 


#청년취업사관학교 #데이터분석가 #데이터분석가부트캠프 #DA교육 #데이터분석교육 #실무프로젝트 #실무경험 #취업포트폴리오 #포트폴리오 #취업연계교육 #코멘토 #모비니티 

728x90