목록분류 전체보기 (71)
tak's data blog

문제 아래 SQL문은 EXCEPT 연산을 사용하여 재고가 없는 영화를 구하고 있다. 해당 SQL문은 EXCEPT연산을 사용하지 말고 같은 결과를 도출하라. except 연산은 차집합 연산이기 때문에 빼주거나 다양한 방법이 있을 것 같았다. 처음에 left join을 생각해봤지만 다시 생각할 필요가 있었다. 1. film 테이블을 먼저 조회한다. 2. not exists 문을 사용하여 재고 존재하는 집합은 film집합에서 제외 시킨다. 여기서 select 1이란 해당 테이블의 갯수만큼 1로된 행을 출력한다는 뜻이다. 값의 존재유무를 우선시한다. 3. (같은결과를 반환하는 다른 문장) 4. (같은결과를 반환하는 다른 문장) 유의해야할 점 : 재고가 없는 집합을 찾기 위해서 not exists처럼 무언가 존재..

이번에는 집합 연산자와 서브쿼리와 관련된 문제풀이를 시작하겠습니다! 문제 아래 SQL문은 FILM 테이블을 2번이나 스캔하고 있다. FILM 테이블을 한번만 SCAN하여 동일한 결과 집합을 구하는 SQL을 작성해라. 좀더 효율적인 SQL을 위해서 줄이는 과정이다. 1. 분석함수 AVG를 사용해서 평균을 구한다. 2. 위에서 구한 값을 인라인뷰로 감싼 후 평균보다 큰 값을 구한다. 유의해야할 점 : 효율적인 SQL작성을 위해 서브쿼리, 인라인 뷰 등의 활용성과 보기쉽게 작성하는 점이 중요하다.

이번에도 어김없이 문제풀이를 해보겠습니다! 문제 rental과 customer 테이블을 이용하여 현재까지 가장 많이 rental을 한 고객의 고객id, 렌탈순위, 누적렌탈횟수, 이름을 출력해라. 미리 생각할점으로 우선 고객id를 뽑기위해 두 테이블을 조인한다./ 순위를 구해야한다(분석함수를 써야한다. 집계함수로는 안된다.) 1. rental 테이블을 살펴보자. 2. customer 테이블을 살펴보자. 3. 가장 많이 렌탈을 한 고객을 구한다. 4. row_number()를 활용해 순위를 구한다. 5. rental_rank를 기준으로 order by를 한다. 그 후 customer테이블과 조인/ group by를 위해서 max를 쓰게 됨. 6. max를 안쓰고 나타내는 또다른 방법.(결과는 같다.) 유의해..

이번에는 rollup의 유용함을 볼 수 있습니다. rollup은 지정된 grouping 칼럼의 소계를 생성하는데 사용합니다. 문제 rental 테이블을 이용하여 연, 월일, 연월일, 전체 각각의 기준으로 rental_id 기준 렌탈이 일어난 횟수를 출력해라. 1. rental테이블을 살펴보자. 2. 연 기준으로 count해본다. 3. 연월기준으로 count해본다. 4. 연월일 기준으로 count한다. 5. rollup함수를 사용하여 grouping 칼럼의 총계를 생성한다. 유의해야할 점 : rollup함수를 사용하는 것과 날짜 데이터를 다룰 때 사용하는 방식.

지난 문제풀이에 이어서 이번에도 문제풀이를 이어가겠습니다. 문제 고객들에게 단체 이메일을 전송 할때, customer 테이블에서 고객의 email주소를 추출하고, 이메일 형식에 맞지 않는 이메일 주소는 제외시켜라. (이메일 형식은 '@'가 존재해야 하고 '@'로 시작하지 말아야 하고 '@'로 끝나지 말아야 한다.) 1. customer 테이블을 살펴보자. 2. like를 이용해서 이메일 형식의 3가지 조건을 만족하도록 다음과 같이 작성한다. 유의해야할 점 : where절에 like연산자를 사용해서 이메일 형식에 해당하도록 작성해야 한다. 1) '@' 가 존재해야 한다. -> like '%@%' 2) '@' 로 시작하면 안된다. -> not like '@%' 3) '@' 로 끝나도 안된다. -> not l..

SQL을 공부하면서 문제풀이를 공유하고자 합니다. 나아가서 나중에는 직접 데이터를 가져와 문제 풀이 내용을 바탕으로 실습해볼 예정입니다!! 문제 payment 테이블에서 단일 거래의 amount의 액수가 가장 많은 고객들의 customer_id를 추출해라. 단, customer_id의 값은 유일. 1. payment 테이블의 구조를 살펴본다. 테이블을 살펴본 후 한꺼번에 생각하지 말고 차례대로 나눠서 생각해보자 2. 전체 거래 중 amount의 액수가 가장 큰 amount를 구한다. 첫번째로 desc를 써 내림차순으로 한 후 limit 1을 정해 가장 큰 amount를 구합니다. 3. payment 테이블에서 가장 큰 amount를 가진 customer_id를 구하고 중복을 제거한다. where절에서 서..

예전에 kaggle 필사를 하면서 그 순간만 이해하고 기억이 오래가지 못해서 방학을 계기로 이번에 '머신러닝 탐구생활'이라는 책을 공부하기로 하였습니다. 처음 주제로 kaggle 'Santander Product Recommendation' 대회 필사내용과 느낀점을 공유해보고자 합니다! 처음으로 데이터를 살펴보자면 훈련 데이터에는 총 1,300만 개의 고객 데이터가 존재하며, 고객마다 48개의 변수가 존재합니다. info 결과로 fecha_dato변수는 날짜 전용 data type이 아닌 object 형태였고, 고객의 나이를 기록하는 age변수는 int형태가 아닌 object형태인것을 확인 할 수 있었다. 이 데이터 뿐만 아니라 다른 대회의 데이터들도 데이터타입에 맞지 않는 변수들은 추후에 타입변환이 중..