일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 제네바
- 데이터 시각화 포트폴리오
- 텍스트분석 시각화
- 교환학생
- 아셈듀오
- 아셈듀오 후기
- 제네바주거
- 무신사 데이터분석
- 제네바기숙사
- 데이터 분석 포트폴리오
- 두잇알고리즘코딩테스트
- 데이터 포트폴리오
- tableau
- 교환학생주거
- MairaDB
- 파이썬
- 교환학생 장학금
- 키워드시각화
- 데이터공모전
- HEG
- 공모전후기
- 아셈듀오 선정
- 미래에셋 공모전
- 리뷰분석
- 태블로 포트폴리오
- 태블로
- 테이블계산
- 패스트캠퍼스 #자료구조 #코딩테스트 #배열
- 제네바경영대학교
- CRM
- Today
- Total
민듀키티
프로그래머스 SQL 코딩테스트 (LEVEL 4 - 1) 본문
🔴 문제 1 : 5월 식품들의 총매출 조회하기
https://school.programmers.co.kr/learn/courses/30/lessons/131117
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
정답 )
SELECT a.PRODUCT_ID, a.PRODUCT_NAME, a.PRICE * sum(b.AMOUNT) as TOTAL_SALES
FROM FOOD_PRODUCT as a, FOOD_ORDER as b
WHERE a.PRODUCT_ID = b.PRODUCT_ID
and DATE_FORMAT(b.PRODUCE_DATE, "%Y%m" ) = 202205
GROUP BY b.PRODUCT_ID
ORDER BY TOTAL_SALES desc, a.PRODUCT_ID
- FOOD_PRODUCT 테이블과 FOOD_ORDER 테이블을 RPODUCT_ID 칼럼을 기준으로 JOIN 해줍니다. (left join 사용도 가능)
- 생산일이 2022년 5월인 상품을 출력해야하기 때문에 DATE_FORMAT 함수 사용
- PRODUCT_ID 별로 출력하기 때문에 GROUP_BY 함수를 사용하여 GROUP BY b.PRODUCT_ID 사용 ( SELECT 절에서 AMOUNT에 SUM 함수 사용하기)
🔴 문제 2 : 서울에 위치한 식당 목록 출력하기
https://school.programmers.co.kr/learn/courses/30/lessons/131118
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
- 주의해야 할 것 : 서울에 위치한 식당 출력하기 "%서울%" 가 아닌 "서울%" 로 출력해야 함
정답 )
SELECT a.REST_ID, a.REST_NAME, a.FOOD_TYPE, a.FAVORITES, a.ADDRESS,
ROUND(AVG(REVIEW_SCORE),2) as SCORE
FROM REST_INFO as a join REST_REVIEW as b
on a.REST_ID = b.REST_ID
and a.ADDRESS like "서울%"
group by a.REST_ID
order by SCORE desc, FAVORITES desc
주요 함수 정리) 반올림 함수
- 반올림함수 : ROUND(값), 소수점 자릿수)
- 올림함수 : CEILING(값) -> 무조건 정수로 출력됨
- 내림함수 : FLOOR(값) -> 무조건 정수로 출력됨
🔴 문제 3 : 년, 월, 성별 별 상품 구매 회원 수 구하기
https://school.programmers.co.kr/learn/courses/30/lessons/131532
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
- 주의해야할것 : 상품을 구매한 회원수를 집계하는 것이기 때문에 count(distinct b.USER_ID ) 을 사용해야 함
정답 )
SELECT YEAR(SALES_DATE) as YEAR, MONTH(SALES_DATE) as MONTH,
a.GENDER, count(distinct b.USER_ID ) as USERS
FROM USER_INFO as a, ONLINE_SALE as b
WHERE a.USER_ID = b.USER_ID
and a.GENDER is not null
GROUP BY YEAR(SALES_DATE),MONTH(SALES_DATE),GENDER
ORDER BY YEAR(SALES_DATE),MONTH(SALES_DATE),GENDER
🔴 문제 4 : 식품분류별 가장 비싼 식품의 정보 조회하기
https://school.programmers.co.kr/learn/courses/30/lessons/131116
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
정답 )
SELECT CATEGORY, PRICE as MAX_PRICE, PRODUCT_NAME
FROM (SELECT CATEGORY, PRICE, PRODUCT_NAME,
RANK() OVER (PARTITION BY CATEGORY ORDER BY PRICE desc) as rn
FROM FOOD_PRODUCT ) as a
WHERE a.rn = 1 and CATEGORY in ('과자', '국', '김치', '식용유')
ORDER BY MAX_PRICE desc
- 저는 서브쿼리를 활용했습니다.
주요함수정리)
그룹내에서 상위값 n개 구하기 문제가 나올 경우 PARTITION BY 사용
- RANK() OVER (PARTITION BY 0000 ORDER BY 0000) : 1등이 2명이면 다음 순위는 3등
- DENSE_RANK() OVER (PARTITION BY 0000 ORDER BY 0000) : 각각의 행에 대한 일련의 번호
- ROW_NUMBER() OVER (PARTITION BY 0000 ORDER BY 0000) : 1등이 2명이어도 1등, 2등 매김
여러 검색어를 하나의 컬럼에서 일치하는 값들을 조회할 때는 WHERE ~ IN 사용
🔴 문제 5 : 우유와 요거트가 담긴 장바구니
https://school.programmers.co.kr/learn/courses/30/lessons/62284
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
정답 )
SELECT CART_ID
FROM CART_PRODUCTS
WHERE NAME in ("Milk","Yogurt")
GROUP BY CART_ID
HAVING count(distinct NAME) >= 2
ORDER BY CART_ID
- 우유와 요거트를 동시에 구입한 유저를 알아야하기 때문에, NAME이 우유와 요거트인 칼럼만 추출함
- 카트 아이디를 기준으로 그룹화하여, HAVING 절 사용
- NAME이 우유와 요거트인 칼럼만 추출하였기 때문에, 동시에 산 사람들의 count(distinct NAME) 값은 2일 것임
점점 느는 것 같아서 기분이 좋아요 !!
'Coding Test > SQL' 카테고리의 다른 글
[취준기록] 코딩테스트에 자주쓰이는 코드 정리 (0) | 2024.02.25 |
---|---|
프로그래머스 SQL 코딩테스트 (LEVEL 4 - 2) (0) | 2023.04.22 |
프로그래머스 SQL 코딩테스트 (LEVEL 3 - 3) (0) | 2023.04.17 |
프로그래머스 SQL 코딩테스트 (LEVEL 3 - 2) (1) | 2023.04.13 |
프로그래머스 SQL 코딩테스트 (LEVEL 3 - 1) (1) | 2023.04.11 |