SQL 13

[Leetcode] 특정 문자열 처리 함수 REGEXP

https://leetcode.com/problems/find-users-with-valid-e-mails/description/?envType=study-plan-v2&envId=top-sql-50 유효한 이메일을 찾는 문제로, 유효한 이메일의 기준은 아래와 같다.The prefix name is a string that may contain letters (upper or lower case), digits, underscore '_', period '.', and/or dash '-'.이메일 아이디는 글자, 숫자, '_', '.', '-'를 포함할 수 있다.The prefix name must start with a letter.이메일은 반드시 알파벳으로 시작해야 한다.The domain is '@..

SQL 2024.06.10

[Leetcode] 중복ID 제거(DELETE)

https://leetcode.com/problems/delete-duplicate-emails/description/?envType=study-plan-v2&envId=top-sql-50    Write a solution to delete all duplicate emails, keeping only one unique email with the smallest id.중복되는 이메일을 제거해라. 단, 가작 작은 수의 ID를 가진 이메일만 남겨놓고.* For SQL users, please note that you are supposed to write a DELETE statement and not a SELECT one.  [정답]DELETE p1FROM person p1, person p2WHER..

SQL 2024.06.08

[E-commerce] kaggle Olist 분석 | 팀 프로젝트 후기

3주간의 길다면 길고 짧다면 짧은 SQL 프로젝트가 끝이 났다.체감으로는 참 길었는데 데이터를 보다 깊게 파고들기에는 짧게 느껴졌던 3주였는데, 정신없이 프로젝트 하고 나니 다 지나가버린 2월...🥲​​SQL 프로젝트 데이터는 kaggle의 olist_dataset이었다.  Brazilian E-Commerce Public Dataset by Olist100,000 Orders with product, customer and reviews infowww.kaggle.com 발표가 3번이 있었는데,1차에서 브라질 시장과 olist 비즈니스 모델 파악 및 데이터셋 EDA,2차에서 1차 EDA한 것들을 깊게 건드려보면서 3차까지 가지고 갈 유의미한 주제들을 걸러내고 단 2-3가지 데이터들을 다각도로 더 깊게..

분석 프로젝트 2024.06.03

[Leetcode] IFNULL, JOIN 다중조건

1251. Average Selling Price  product의 가격 테이블과 판매된 수량에 대한 테이블이 있는 것을 조인해서 '(판매가격*수량) / 판매수량'으로 평균 판매 가격을 구하는 문제였다. 단, 신경써야 할 부분이 2가지 였는데,1. 정답 쿼리는 단 한개도 판매되지 않은 상품까지도 결과에 조회가 되야 한다는 것 (IFNULL 사용)2. 같은 상품이라도 판매한 날짜에 따라 가격이 다르다는 것 (JOIN 조건 추가) [정답]SELECT product_id , IFNULL(ROUND(SUM(total) / SUM(units),2),0) AS average_price -- 만일 unitssold의 값이 없어서 null이라면 0을 반환FROM ( SELECT p.product_id --..

SQL 2024.05.25

[Leetcode] SUM/AVG() OVER (ORDER BY ~ ROWS ~)

SUM(~) OVER (ORDER BY ~)엘레베이터에 차례(Turn)대로 탔을 때 1000kg가 넘지 않는 조건에서 누구까지 탈 수 있는지 구하는 문제였다. [정답]SELECT person_nameFROM (SELECT person_name, weight, turn, SUM(weight) over (order by turn) as totalFROM Queue)aWHERE total  SUM, AVG 뒤에 OVER(ORDER BY ~)를 붙이면 누적 합계, 누적 평균을 행 단위로 구할 수 있다.  AVG/SUM(~) OVER (ORDER BY ~ ROWS BETWEEN n PRECEDING AND CURRENT ROW)오늘 날짜 기준으로 지난 7일간의 매출 합계, 평균 구..

SQL 2024.05.21

[Leetcode] 조건에 해당되지 않는 대상에 고정값 적용하기

바뀐 가격만 알 수 있는 테이블이 있고, 여기에 해당되지 않는 product_id는 원래의 값인 10원을 유지한다는 조건이었다.기존의 가격인 10원이 어느 테이블에도 들어있지 않았기 때문에 따로 지정을 해줘야 했다. [정답]SELECT product_id, new_price AS priceFROM productsWHERE (product_id, change_date) IN ( SELECT product_id, MAX(change_date) as recent FROM Products WHERE change_date 고정된 값 10을 SELECT 문에 쓰고 alias로 column명을 지정해주면 해당 컬럼이 추가가 된다.

카테고리 없음 2024.05.21

[프로그래머스] SQL 반복문, WITH RECURSIVE

GROUP BY > 입양시각 구하기(2)  ANIMAL_OUTS : 동물 보호소에서 입양 보낸 동물의 정보를 담은 테이블SEX_UPON_OUTCOME : 동물의 아이디, 생물 종, 입양일, 이름, 성별 및 중성화 여부 정보 테이블  0시부터 23시까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성하는 문제였다.그런데 그냥 group by를 해서 결과를 조회하면 0시부터 23시까지 나오지 않고, 입양이 발생한 시간만 조회되는 문제가 있어 0시부터 23시까지의 시간 테이블을 생성해야 하는 것이 관건이었다. 이 때 사용되는 것이 SQL에서 반복문처럼 사용할 수 있는 WITH RECURSIVE 함수/** [Example] 0시부터 24시까지 시간 컬럼 만들기 **/WITH recursiv..

SQL 2024.05.21

[중급 쿼리] JOIN, Subquery, UNION, INTERSECT, EXCEPT

서브쿼리MySQL에서는 ‘FROM 테이블명’에 서브쿼리를 입력하게 되면 반드시 alias(이름)을 지정해주어야 한다./* rental 테이블에서 고객별 평균 대여 횟수보다 많은 대여를 한고객들의 이름( first_name , last_name )을 찾아주세요. */SELECT first_name, last_nameFROM customerWHERE customer_id IN ( -- JOIN쿼리 SELECT customer_id FROM rental GROUP BY customer_id HAVING COUNT(*) > ( SELECT AVG(rental_count) -- 전체 평균값(각 customer_id별 rental 횟수/customer_id 수) FROM (SELECT..

SQL 2024.05.20