코딩 문제풀이 | 프로그래머스 | MySQL | “JOIN”

isitcake_yes·2023년 3월 2일
0

코딩문제풀이

목록 보기
6/6
post-thumbnail

JOIN

💎💎 Lv2

조건에 맞는 도서와 저자 리스트 출력하기

Q. '경제' 카테고리에 속하는 도서들의 도서 ID(BOOK_ID), 저자명(AUTHOR_NAME), 출판일(PUBLISHED_DATE) 리스트를 출력하는 SQL문을 작성해주세요.
결과는 출판일을 기준으로 오름차순 정렬해주세요.

SELECT B.book_id, A.author_name, DATE_FORMAT(published_date, "%Y-%m-%d") AS published_date 
FROM book B LEFT JOIN author A 
ON B.author_id = A.author_id
WHERE category="경제" 
ORDER BY published_date;

상품 별 오프라인 매출 구하기

Q. PRODUCT 테이블과 OFFLINE_SALE 테이블에서 상품코드 별 매출액(판매가 * 판매량) 합계를 출력하는 SQL문을 작성해주세요. 결과는 매출액을 기준으로 내림차순 정렬해주시고 매출액이 같다면 상품코드를 기준으로 오름차순 정렬해주세요.

SELECT product_code, SUM(price*sales_amount) AS sales 
FROM offline_sale OS LEFT JOIN product P 
ON OS.product_id=P.product_id 
GROUP BY product_code ORDER BY 2 DESC, 1;

💎💎💎 Lv3

없어진 기록찾기

Q. 천재지변으로 인해 일부 데이터가 유실되었습니다. 입양을 간 기록은 있는데, 보호소에 들어온 기록이 없는 동물의 ID와 이름을 ID 순으로 조회하는 SQL문을 작성해주세요.

SELECT animal_id, name FROM animal_outs 
WHERE animal_id NOT IN (SELECT animal_id FROM animal_ins) ORDER BY animal_id;

있었는데요 없었습니다

Q. 관리자의 실수로 일부 동물의 입양일이 잘못 입력되었습니다. 보호 시작일보다 입양일이 더 빠른 동물의 아이디와 이름을 조회하는 SQL문을 작성해주세요. 이때 결과는 보호 시작일이 빠른 순으로 조회해야합니다.

SELECT AI.animal_id, AI.name FROM animal_ins AI
LEFT JOIN animal_outs AO
ON AI.animal_id=AO.animal_id
WHERE AI.datetime > AO.datetime
ORDER BY AI.datetime;

오랜 기간 보호한 동물(1)

Q. 아직 입양을 못 간 동물 중, 가장 오래 보호소에 있었던 동물 3마리의 이름과 보호 시작일을 조회하는 SQL문을 작성해주세요. 이때 결과는 보호 시작일 순으로 조회해야 합니다.

SELECT AI.name, AI.datetime 
FROM animal_ins AI LEFT JOIN animal_outs AO 
ON AI.animal_id=AO.animal_id 
WHERE AO.animal_id IS NULL 
ORDER BY AI.datetime LIMIT 3;

💎💎💎💎 Lv4

그룹별 조건에 맞는 식당 목록 출력하기

Q. MEMBER_PROFILE와 REST_REVIEW 테이블에서 리뷰를 가장 많이 작성한 회원의 리뷰들을 조회하는 SQL문을 작성해주세요. 회원 이름, 리뷰 텍스트, 리뷰 작성일이 출력되도록 작성해주시고, 결과는 리뷰 작성일을 기준으로 오름차순, 리뷰 작성일이 같다면 리뷰 텍스트를 기준으로 오름차순 정렬해주세요.

SELECT M.member_name, R.review_text, DATE_FORMAT(R.review_date, "%Y-%m-%d")
FROM rest_review R LEFT JOIN member_profile M 
ON R.member_id = M.member_id 
WHERE R.member_id=(SELECT member_id FROM rest_review GROUP BY member_id ORDER BY COUNT(1) DESC LIMIT 1)
ORDER BY 3, 2;

특정기간동안 대여 가능한 자동차들의 대여비용 구하기

Q. CAR_RENTAL_COMPANY_CAR 테이블과 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블과 CAR_RENTAL_COMPANY_DISCOUNT_PLAN 테이블에서 자동차 종류가 '세단' 또는 'SUV' 인 자동차 중 2022년 11월 1일부터 2022년 11월 30일까지 대여 가능하고 30일간의 대여 금액이 50만원 이상 200만원 미만인 자동차에 대해서 자동차 ID, 자동차 종류, 대여 금액(컬럼명: FEE) 리스트를 출력하는 SQL문을 작성해주세요. 결과는 대여 금액을 기준으로 내림차순 정렬하고, 대여 금액이 같은 경우 자동차 종류를 기준으로 오름차순 정렬, 자동차 종류까지 같은 경우 자동차 ID를 기준으로 내림차순 정렬해주세요.

SELECT C.car_id, C.car_type, ROUND((C.daily_fee/100)*(100-DP.discount_rate)*30) as fee
FROM (SELECT car_id 
		FROM car_rental_company_rental_history 
        GROUP BY car_id
		HAVING MAX(end_date)<'2022-11-01') AS H 
JOIN car_rental_company_car AS C
ON H.car_id = C.car_id
JOIN car_rental_company_discount_plan AS DP 
ON DP.car_type = C.car_type
WHERE C.car_type in ("세단","SUV") AND DP.duration_type like "30일%"
AND (daily_fee/100)*(100-discount_rate)*30 between 500000 AND 2000000
ORDER BY fee DESC, car_type; 

주문량이 많은 아이스크림들 조회하기

Q. 7월 아이스크림 총 주문량과 상반기의 아이스크림 총 주문량을 더한 값이 큰 순서대로 상위 3개의 맛을 조회하는 SQL 문을 작성해주세요.

SELECT flavor FROM 
(SELECT * FROM first_half 
UNION ALL 
SELECT * FROM july) LIST
GROUP BY flavor 
ORDER BY SUM(total_order) DESC LIMIT 3;

5월 식품들의 총매출 조회하기

Q. FOOD_PRODUCT와 FOOD_ORDER 테이블에서 생산일자가 2022년 5월인 식품들의 식품 ID, 식품 이름, 총매출을 조회하는 SQL문을 작성해주세요. 이때 결과는 총매출을 기준으로 내림차순 정렬해주시고 총매출이 같다면 식품 ID를 기준으로 오름차순 정렬해주세요.

SELECT FO.product_id, FP.product_name,
SUM(FO.amount*FP.price) AS total_sales
FROM food_order FO JOIN food_product FP 
ON FO.product_id=FP.product_id 
WHERE DATE_FORMAT(produce_date,"%Y-%m")="2022-05" 
GROUP BY product_id ORDER BY 3 DESC, 1;

보호소에서 중성화한 동물

Q. 보호소에서 중성화 수술을 거친 동물 정보를 알아보려 합니다. 보호소에 들어올 당시에는 중성화1되지 않았지만, 보호소를 나갈 당시에는 중성화된 동물의 아이디와 생물 종, 이름을 조회하는 아이디 순으로 조회하는 SQL 문을 작성해주세요.

SELECT AI.animal_id, AO.animal_type, AO.name 
FROM animal_ins AI LEFT JOIN animal_outs AO 
ON AI.animal_id=AO.animal_id 
WHERE AI.sex_upon_intake LIKE "intact%" 
AND AO.sex_upon_outcome REGEXP 'Neutered|Spayed' ORDER BY 1;

💎💎💎💎💎 Lv5

상품을 구매한 회원 비율 구하기

Q. USER_INFO 테이블과 ONLINE_SALE 테이블에서 2021년에 가입한 전체 회원들 중 상품을 구매한 회원수와 상품을 구매한 회원의 비율(=2021년에 가입한 회원 중 상품을 구매한 회원수 / 2021년에 가입한 전체 회원 수)을 년, 월 별로 출력하는 SQL문을 작성해주세요. 상품을 구매한 회원의 비율은 소수점 두번째자리에서 반올림하고, 전체 결과는 년을 기준으로 오름차순 정렬해주시고 년이 같다면 월을 기준으로 오름차순 정렬해주세요.

SELECT  YEAR(sales_date) AS year, MONTH(sales_date) as month,
		COUNT(DISTINCT user_id) AS puchased_users, 
		ROUND(
        	COUNT(DISTINCT user_id) / 
            (SELECT COUNT(DISTINCT user_id) FROM user_info 
            		WHERE YEAR(joined)=2021),1) 
        AS puchased_ratio
FROM online_sale 
WHERE user_id IN (SELECT user_id FROM user_info WHERE YEAR(joined)=2021)
GROUP BY YEAR(sales_date), MONTH(sales_date)
ORDER BY 1,2
profile
주니어 개발자 주니어발록 주니어예티 주니어레이스

0개의 댓글