데이터 스터디/SQL

[programmers] SQL 고득점 Kit - Select문

케이와이엠 2023. 4. 5. 16:18

예전에 sql코테 준비할 시기에 프로그래머스 sql키트로 많이 공부했었다.

지금은 계속 파이썬으로만 하다보니 감을 잃어서 .. 키트 문법 정리하면서 다시 감 찾아보려고 정리 !

 

# 아픈 동물 찾기

ANIMALS_INS 테이블에서 동물 보호소에 들어온 동물 중 아픈 동물의 아이디와 이름을 조회하는 SQL 문을 작성해주세요. 이때 결과는 아이디 순으로 조회해주세요.
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE INTAKE_CONDITION = 'Sick'

- 데이터 추출은 select문을 사용하면 된다. 

- 이때 AS를 활용해 컬럼명을 다르게 설정할 수 있다.

 

 

# 3월에 태어난 여성 회원 목록 출력하기

MEMBER_PROFILE  테이블에서 생일이 3월인 여성 회원의 ID, 이름, 성별, 생년월일을 조회하는 SQL문을 작성해주세요. 이때 전화번호가 NULL인 경우는 출력대상에서 제외시켜 주시고, 결과는 회원ID를 기준으로 오름차순 정렬해주세요.
SELECT MEMBER_ID,MEMBER_NAME, GENDER, DATE_FORMAT(DATE_OF_BIRTH, '%Y-%m-%d') AS DATE_OF_BIRTH
FROM MEMBER_PROFILE
WHERE MONTH(DATE_OF_BIRTH) = 3 AND GENDER ='W' AND TLNO IS NOT NULL
ORDER BY MEMBER_ID

- DATE_FORMAT(변수명, '%Y-%m-%d') -> 날짜형식 지정해주기

- select문에 함수쓰면 칼럼 이름 바뀌니까 AS로 칼럼 이름 다시 설정해주기

- IS NOT NULL , IS NULL 구문

- 기본설정이 오름차순(asc)임.

 

#강원도에 위치한 생산공장 목록 출력

FOOD_FACTORY 테이블에서 강원도에 위치한 식품공장의 공장 ID, 공장 이름, 주소를 조회하는 SQL문을 작성해주세요. 이때 결과는 공장 ID를 기준으로 오름차순 정렬해주세요.
SELECT FACTORY_ID,	FACTORY_NAME,	ADDRESS
FROM FOOD_FACTORY
WHERE ADDRESS LIKE '강원도%'
ORDER BY FACTORY_ID

-  주소에 강원도가 포함되어있는지를 필터링해야한다. -> LIKE'강원도%' 라고 하면 강원도로 시작해서 뒤에 쭉 이어오라는 뜻

 

 

# 재구매가 일어난 상품과 회원 리스트 구하기

ONLINE_SALE 테이블에서 동일한 회원이 동일한 상품을 재구매한 데이터를 구하여, 재구매한 회원 ID와 재구매한 상품 ID를 출력하는 SQL문을 작성해주세요. 결과는 회원 ID를 기준으로 오름차순 정렬해주시고 회원 ID가 같다면 상품 ID를 기준으로 내림차순 정렬해주세요.
select USER_ID, PRODUCT_ID 
from ONLINE_SALE
group by USER_ID, PRODUCT_ID
having count(*) > 1

- 재구매 = 동일한 id가 2번 이상 등장해야 한다는 뜻.

- row개수를 구하고 싶을 때 count(*)를 써줌

- 따라서 groupby로 묶어준다음에 각각의 행 개수 세어주면 됨

 

# 오프라인/온라인 판매 데이터 통합하기

ONLINE_SALE 테이블과 OFFLINE_SALE 테이블에서 2022년 3월의 오프라인/온라인 상품 판매 데이터의 판매 날짜, 상품ID, 유저ID, 판매량을 출력하는 SQL문을 작성해주세요. 
OFFLINE_SALE 테이블의 판매 데이터의 USER_ID 값은 NULL 로 표시해주세요. 결과는 판매일을 기준으로 오름차순 정렬해주시고 판매일이 같다면 상품 ID를 기준으로 오름차순, 상품ID까지 같다면 유저 ID를 기준으로 오름차순 정렬해주세요.
SELECT DATE_FORMAT(SALES_DATE, '%Y-%m-%d') as SALES_DATE, PRODUCT_ID, USER_ID, SALES_AMOUNT
FROM ONLINE_SALE
WHERE DATE_FORMAT(SALES_DATE, '%Y-%m') = '2022-03'

UNION 

SELECT DATE_FORMAT(SALES_DATE, '%Y-%m-%d') as SALES_DATE, PRODUCT_ID, NULL AS USER_ID, SALES_AMOUNT
FROM OFFLINE_SALE
WHERE DATE_FORMAT(SALES_DATE, '%Y-%m') = '2022-03'
     
ORDER BY SALES_DATE, PRODUCT_ID, USER_ID

- 데이터프레임을 따로 따로 만들어서 union으로 합쳐준다

- 이때 합쳐주는 구문이 끝나고 나서 ORDER BY를 써주면 정렬 가능함