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

isitcake_yes·2023년 2월 2일
0

코딩문제풀이

목록 보기
2/6
post-thumbnail

SELECT

🍏 Lv1.

상위 n개 레코드

Q. 동물 보호소에 가장 먼저 들어온 동물의 이름을 조회하는 SQL 문을 작성해주세요.

 SELECT name FROM animal_ins ORDER BY datetime LIMIT 1;

여러 기준으로 정렬하기

Q. 동물 보호소에 들어온 모든 동물의 아이디와 이름, 보호 시작일을 이름 순으로 조회하는 SQL문을 작성해주세요. 단, 이름이 같은 동물 중에서는 보호를 나중에 시작한 동물을 먼저 보여줘야 합니다.

SELECT animal_id, name, datetime FROM animal_ins ORDER BY name, datetime DESC;

특정 컬럼의 특정값 제외 혹은 포함

SELECT animal_id, name FROM animal_ins WHERE intake_condition NOT IN ("Aged"); 

SELECT animal_id, name FROM animal_ins WHERE intake_condition != "Aged"; 

SELECT animal_id, name FROM animal_ins WHERE intake_condition = "sick"; 

조건에 맞는 회원수 구하기

Q. USER_INFO 테이블에서 2021년에 가입한 회원 중 나이가 20세 이상 29세 이하인 회원이 몇 명인지 출력하는 SQL문을 작성해주세요.

SELECT count(*) as USERS FROM user_info 
WHERE (age BETWEEN 20 AND 29) AND (joined BETWEEN "2021-01-01" AND "2021-12-31"); 

평균 일일 대여 요금 구하기

Q. CAR_RENTAL_COMPANY_CAR 테이블에서 자동차 종류가 'SUV'인 자동차들의 평균 일일 대여 요금을 출력하는 SQL문을 작성해주세요. 이때 평균 일일 대여 요금은 소수 첫 번째 자리에서 반올림하고, 컬럼명은 AVERAGE_FEE 로 지정해주세요.

SELECT ROUND(AVG(daily_fee),0) as average_fee FROM car_rental_company_car WHERE car_type = 'SUV';

인기있는 아이스크림

Q. 상반기에 판매된 아이스크림의 맛을 총주문량을 기준으로 내림차순 정렬하고 총주문량이 같다면 출하 번호를 기준으로 오름차순 정렬하여 조회하는 SQL 문을 작성해주세요.

SELECT flavor FROM first_half ORDER BY total_order DESC, shipment_id;

흉부외과 또는 일반외과 의사 목록 출력하기

Q. DOCTOR 테이블에서 진료과가 흉부외과(CS)이거나 일반외과(GS)인 의사의 이름, 의사ID, 진료과, 고용일자를 조회하는 SQL문을 작성해주세요. 이때 결과는 고용일자를 기준으로 내림차순 정렬하고, 고용일자가 같다면 이름을 기준으로 오름차순 정렬해주세요.

SELECT dr_name, dr_id, mcdp_cd, DATE_FORMAT(hire_ymd, "%Y-%m-%d") AS hire_ymd 
FROM doctor WHERE mcdp_cd IN ("CS","GS") ORDER BY hire_ymd DESC, dr_name ASC; 

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

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

SELECT factory_id, factory_name, address FROM food_factory 
WHERE address LIKE "%강원도%" ORDER BY factory_id ASC;

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

Q. BOOK 테이블에서 2021년에 출판된 '인문' 카테고리에 속하는 도서 리스트를 찾아서 도서 ID(BOOK_ID), 출판일 (PUBLISHED_DATE)을 출력하는 SQL문을 작성해주세요.
결과는 출판일을 기준으로 오름차순 정렬해주세요.

SELECT book_id, DATE_FORMAT(published_date, "%Y-%m-%d") AS published_date FROM book 
WHERE category="인문" AND YEAR(published_date)=2021ORDER BY published_date;

NULL값 대체

Q. PATIENT 테이블에서 12세 이하인 여자환자의 환자이름, 환자번호, 성별코드, 나이, 전화번호를 조회하는 SQL문을 작성해주세요. 이때 전화번호가 없는 경우, 'NONE'으로 출력시켜 주시고 결과는 나이를 기준으로 내림차순 정렬하고, 나이 같다면 환자이름을 기준으로 오름차순 정렬해주세요.

SELECT pt_name, pt_no, gend_cd, age, IFNULL(tlno,"NONE") FROM patient 
WHERE age <= 12 AND gend_cd="W" ORDER BY age DESC, pt_name ASC; 

과일로 만든 아이스크림 고르기

Q. 상반기 아이스크림 총주문량이 3,000보다 높으면서 아이스크림의 주 성분이 과일인 아이스크림의 맛을 총주문량이 큰 순서대로 조회하는 SQL 문을 작성해주세요.

SELECT A.flavor FROM first_half A LEFT JOIN icecream_info B ON A.flavor = B.flavor 
WHERE total_order >=3000 AND ingredient_type="fruit_based" ORDER BY total_order DESC;

🍏🍏 Lv 2.

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

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

SELECT user_id, product_id FROM online_sale 
GROUP BY user_id, product_id HAVING COUNT(*)>=2 ORDER BY user_id ASC, product_id DESC;

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

Q. 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 gender="W" AND MONTH(date_of_birth)="03" AND tlno IS NOT NULL; 

🍏🍏🍏🍏 Lv4.

서울에 위치한 식당 목록 출력하기

Q. REST_INFO와 REST_REVIEW 테이블에서 서울에 위치한 식당들의 식당 ID, 식당 이름, 음식 종류, 즐겨찾기수, 주소, 리뷰 평균 점수를 조회하는 SQL문을 작성해주세요. 이때 리뷰 평균점수는 소수점 세 번째 자리에서 반올림 해주시고 결과는 평균점수를 기준으로 내림차순 정렬해주시고, 평균점수가 같다면 즐겨찾기수를 기준으로 내림차순 정렬해주세요.

SELECT I.rest_id, I.rest_name, I.food_type, I.favorites, I.address, ROUND(AVG(R.review_score),2) as score 
FROM rest_info I LEFT JOIN rest_review R 
ON I.rest_id = R.rest_id 
WHERE address LIKE "서울%" GROUP BY R.rest_id HAVING score IS NOT NULL 
ORDER BY score DESC,favorites DESC;

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

Q. 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 MONTH(sales_date)="03" AND YEAR(sales_date)="2022"
UNION
SELECT DATE_FORMAT(sales_date, "%Y-%m-%d") AS sales_date, product_id,NULL AS user_id, sales_amount FROM offline_sale 
WHERE MONTH(sales_date)="03" AND YEAR(sales_date)="2022"
ORDER BY sales_date, product_id, user_id;

🌟정리

# DATE_FORMAT
DATE_FORMAT(sales_date, "%Y-%m-%d")  // 2023-01-10

# DATE YEAR, MONTH
YEAR(published_date)="2021"
MONTH(sales_date)="03"

# 반올림, 버림 (소수점 n 자리까지 반올림/버림)
ROUND(숫자,반올림할 자릿수 n)  
  // ROUND(1234.5678 ,2) // 1234.57 
TRUNCATE(숫자,버릴 자릿수 n)   
  // ROUND(1234.5678 ,-2) // 1200  
  
# BETWEEN 범위
BETWEEN 20 AND 29
BETWEEN "2021-01-01" AND "2021-12-31"
profile
주니어 개발자 주니어발록 주니어예티 주니어레이스

0개의 댓글