반응형
안녕하세요. 오늘은 저를 위해 작성해 두는 프로그래머스 SQL 답지입니다.
평균 일일 대여 요금 구하기
ROUND()
: 소수점 반올림하기 (셋째 자리에서 반올림할 경우 ROUND(DAILY_FEE, 2))
SELECT ROUND(AVG(DAILY_FEE),0) AS AVERAGE_FEE
FROM CAR_RENTAL_COMPANY_CAR
WHERE CAR_TYPE = 'SUV'
GROUP BY CAR_TYPE
흉부외과 또는 일반외과 의사 목록 출력하기
DATE_FORMAT()
: 2024-01-01 로 표현하고 싶을 때는 DATE_FORMAT(HIRE_YMD, '%Y-%m-%d') 이렇게 작성한다.
SELECT DR_NAME, DR_ID, MCDP_CD, DATE_FORMAT(HIRE_YMD, '%Y-%m-%d') AS HIRE_YMD
FROM DOCTOR
WHERE MCDP_CD = 'CS' OR MCDP_CD = 'GS'
ORDER BY HIRE_YMD DESC, DR_NAME ASC
과일로 만든 아이스크림 고르기
JOIN을 활용하여 문제를 풀었다.
SELECT F.FLAVOR
FROM FIRST_HALF AS F JOIN ICECREAM_INFO AS I ON I.FLAVOR = F.FLAVOR
WHERE INGREDIENT_TYPE = 'fruit_based' AND TOTAL_ORDER > 3000
ORDER BY TOTAL_ORDER DESC;
3월에 태어난 여성 회원 목록 출력하기
IS NULL, IS NOT NULL
: NULL 인지 아닌지 확인하는 명령어이다.
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 DATE_FORMAT(DATE_OF_BIRTH, '%m') = 3 AND TLNO IS NOT NULL
ORDER BY MEMBER_ID;
서울에 위치한 식당 목록 출력하기
GROUP BY
: REVIEW 테이블에는 REST_ID가 여러 개 있다. 이를 하나의 튜플로 묶기 위해서 사용한다.
: GROUP BY 와 함께 SUM, AVG, MIN, MAX를 사용할 수 있다.
'서울%'
서울로 시작하는 문자열을 찾고 싶을 때는 위와 같이 작성한다.
SELECT R.REST_ID, REST_NAME, FOOD_TYPE, FAVORITES, ADDRESS, ROUND(AVG(REVIEW_SCORE), 2) AS SCORE
FROM REST_INFO AS I RIGHT JOIN REST_REVIEW AS R ON R.REST_ID = I.REST_ID
WHERE ADDRESS LIKE '서울%'
GROUP BY I.REST_ID
ORDER BY SCORE DESC, FAVORITES DESC;
조건에 부합하는 중고거래 댓글 조회하기
게시글의 컬럼인지 댓글의 컬럼인지 잘 확인해야 한다.
SELECT TITLE, B.BOARD_ID, R.REPLY_ID, R.WRITER_ID, R.CONTENTS, DATE_FORMAT(R.CREATED_DATE, '%Y-%m-%d') AS CREATED_DATE
FROM USED_GOODS_BOARD AS B JOIN USED_GOODS_REPLY AS R ON R.BOARD_ID = B.BOARD_ID
WHERE DATE_FORMAT(B.CREATED_DATE, '%Y-%m') = '2022-10'
ORDER BY R.CREATED_DATE, TITLE
인기있는 아이스크림
SELECT FLAVOR
FROM FIRST_HALF
ORDER BY TOTAL_ORDER DESC, SHIPMENT_ID ASC
강원도에 위치한 생산공장 목록 출력하기
SELECT FACTORY_ID, FACTORY_NAME, ADDRESS
FROM FOOD_FACTORY
WHERE ADDRESS LIKE '강원도%'
ORDER BY FACTORY_ID ASC
12세 이하인 여자 환자 목록 출력하기
IFNULL()
: NULL 이면 다른 값으로 지정할 수 있다.
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
조건에 맞는 도서 리스트 출력하기
SELECT BOOK_ID, DATE_FORMAT(PUBLISHED_DATE, '%Y-%m-%d') AS PUBLISHED_DATE
FROM BOOK
WHERE DATE_FORMAT(PUBLISHED_DATE, '%Y') = '2021'AND CATEGORY = '인문'
ORDER BY PUBLISHED_DATE;
조건에 맞는 회원수 구하기
COUNT(*)
: 컬럼의 개수를 셀 때 사용한다.
SELECT COUNT(*) AS USERS
FROM USER_INFO
WHERE DATE_FORMAT(JOINED, '%Y') = '2021' AND AGE >= 20 AND AGE <= 29;
업그레이드 된 아이템 구하기
이 문제는 잘 모르겠어서 구글링을 해봤다.
RARITY가 RARE일 때의 ITEM_ID가 PARENT_ITEM_ID 안에 들어있다면 출력해야 한다.
SELECT I.ITEM_ID, ITEM_NAME, RARITY
FROM ITEM_INFO I JOIN ITEM_TREE T ON I.ITEM_ID = T.ITEM_ID
WHERE T.PARENT_ITEM_ID IN (
SELECT ITEM_ID
FROM ITEM_INFO
WHERE RARITY = 'RARE'
)
ORDER BY ITEM_ID DESC;
Python 개발자 찾기
SELECT ID, EMAIL, FIRST_NAME, LAST_NAME
FROM DEVELOPER_INFOS
WHERE SKILL_1 = 'Python' OR SKILL_2 = 'Python' OR SKILL_3 = 'Python'
ORDER BY ID;
조건에 맞는 개발자 찾기
문제에서 주의할 점 : JOIN을 하지 않는다.
CODE와 SKILL_CODE는 다른 숫자이기 때문에 subquery로 가져와서 판단해야한다.
SQL에서 비트연산자는 숫자를 2진수로 자동 변환하여 연산을 수행하므로 BIN()과 같은 함수는 사용하지 않아도 된다.
SELECT ID, EMAIL, FIRST_NAME, LAST_NAME
FROM DEVELOPERS
WHERE SKILL_CODE & (SELECT CODE FROM SKILLCODES WHERE NAME = 'C#')
OR SKILL_CODE & (SELECT CODE FROM SKILLCODES WHERE NAME = 'Python')
ORDER BY ID;
잔챙이 잡은 수 구하기
SELECT COUNT(*) FISH_COUNT
FROM FISH_INFO
WHERE LENGTH IS NULL;
가장 큰 물고기 10마리 구하기
LIMIT 10;
10개의 결과만 가져올 수 있다.
이 때, LIMIT 절은 ORDER BY보다 뒤에 작성해야한다.
SELECT ID, LENGTH
FROM FISH_INFO
ORDER BY LENGTH DESC, ID ASC
LIMIT 10;
특정 물고기를 잡은 총 수 구하기
SELECT COUNT(*) FISH_COUNT
FROM FISH_INFO I JOIN FISH_NAME_INFO N ON I.FISH_TYPE = N.FISH_TYPE
WHERE FISH_NAME = 'BASS' OR FISH_NAME = 'SNAPPER';
반응형
'💾database' 카테고리의 다른 글
[Mysql] 데이터베이스에 이모지(이모티콘) 안들어가는 이슈 해결하기 (1) | 2024.04.02 |
---|---|
[데이터 베이스] SQL 고급 문법 1 (내장 함수, NULL 값 처리, 부속 질의) (1) | 2023.02.19 |
[데이터 베이스] SQL 기본 문법 3 (CREATE, ALTER, INSERT, UPDATE, DELETE) (0) | 2023.02.15 |
[데이터 베이스] SQL 기본 문법 2 (JOIN, SUBQUERY) (0) | 2023.02.15 |
[데이터 베이스] SQL 기본 문법 1 (SELECT, WHERE, ORDER BY, GROUP BY) (0) | 2023.02.15 |