프로그래머스 SQL 고득점 Kit - SELECT(1) (MySQL)

사람·2025년 1월 14일

MySQL

목록 보기
1/8

1. 평균 일일 대여 요금 구하기

https://school.programmers.co.kr/learn/courses/30/lessons/151136


구현

SELECT ROUND(AVG(DAILY_FEE), 0) as AVERAGE_FEE
FROM CAR_RENTAL_COMPANY_CAR
WHERE CAR_TYPE = 'SUV';

반올림 (ROUND)

  • ROUND(반올림할 값, 반올림할 자릿수)
SELECT ROUND(컬럼명1, 자릿수), ROUND(컬럼명2, 자릿수), ... FROM 테이블명;
SELECT ROUND(1234.56789) FROM DUAL
-- 1235
 
SELECT ROUND(1234.56789 ,1) FROM DUAL
-- 1234.6
 
SELECT ROUND(1234.56789 ,4) FROM DUAL
-- 1234.5679
 
SELECT ROUND(1234.56789 ,-1) FROM DUAL
-- 1230
 
SELECT ROUND(1234.56789 ,-2) FROM DUAL
-- 1200

버림 (TRUNCATE)

  • TRUNCATE(버림할 값, 버림할 자릿수)
SELECT TRUNCATE(컬럼명1, 자릿수), TRUNCATE(컬럼명2, 자릿수), ... FROM 테이블명;
SELECT TRUNCATE(1234.56789 ,1) FROM DUAL;
-- 1234.5
 
SELECT TRUNCATE(1234.56789 ,4) FROM DUAL;
-- 1234.5678
 
SELECT TRUNCATE(1234.56789 ,-1) FROM DUAL;
-- 1230
 
SELECT TRUNCATE(1234.56789 ,-2) FROM DUAL;
-- 1200

평균 (AVG)

SELECT AVG(컬럼명1), AVG(컬럼명2), ... FROM 테이블명;

컬럼 별칭 사용 (AS)

SELECT 컬럼명1 AS 별칭명1, 컬럼명2 AS 별칭명2, ... FROM 테이블명;

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

https://school.programmers.co.kr/learn/courses/30/lessons/131120


구현

SELECT MEMBER_ID, MEMBER_NAME, GENDER, DATE_FORMAT(DATE_OF_BIRTH, '%Y-%m-%d') as DATE_OF_BIRTH 
FROM MEMBER_PROFILE
WHERE TLNO is not null AND MONTH(DATE_OF_BIRTH) = 3 AND GENDER = 'W'
ORDER BY MEMBER_ID;

DATE 타입 데이터

1) 출력 포멧 지정 (DATE_FORMAT)

SELECT DATE_FORMAT(hiredate, '%Y-%m-%d') FROM emp;
-- YYYY-mm-dd

SELECT DATE_FORMAT(hiredate, '%Y-%m-%d %T') FROM emp;
SELECT DATE_FORMAT(hiredate, '%Y-%m-%d %H:%i:%s') FROM emp;
-- YYYY-mm-dd 00:00:00

2) 특정 날짜 혹은 시간 정보 조회

  • DATE(expression) - 주어진 expression에 해당하는 날짜 정보 반환
  • MONTH(date) - 주어진 date에서 월에 해당하는 숫자를 반환(0~12)
  • DAY(date) - 주어진 date에서 일자에 해당하는 숫자를 반환(0~31)
  • HOUR(date) - 주어진 date에서 시간에 해당하는 숫자를 반환(0~23)
  • MINUTE(date) - 주어진 date에서 분에 해당하는 숫자를 반환(0~59)
  • SECOND(date) - 주어진 date에서 초에 해당하는 숫자를 반환(0~59)
  • WEEKDAY(date) - 주어진 date에서 요일에 해당하는 숫자를 반환(월요일=0, 일요일=6)
  • LAST_DAY(date) - 주어진 date에서 해당 월의 마지막 날짜 정보 반환
  • SEC_TO_TIME(seconds) - 주어진 seconds를 기준으로 시간 정보 반환(HH:MM:SS 형식)

3) 날짜 수 조회

  • DAYOFYEAR(date) - 주어진 date의 일자가 해당 연도에서 몇 번째 날인지 반환(1~366)
  • DAYOFMONTH(date) - 주어진 date의 일자가 해당 월에서 몇 번째 날인지 반환(0~31)
  • DAYOFWEEK(date) - 주어진 date의 일자가 해당 주에서 몇 번째 날인지 반환(일요일=1, 토요일=7)

column 값이 null인 데이터 제외 (is not null)

SELECT 컬럼명1 컬럼명2, ... FROM 테이블명 WHERE 컬럼명 is not null;
SELECT MEMBER_ID
FROM MEMBER_PROFILE
WHERE TLNO is not null;

특정 column 값을 기준으로 정렬 (ORDER BY)

1) 오름차순 정렬 (Default)

SELECT 컬럼명1 컬럼명2, ... FROM 테이블명 ORDER BY 컬럼명;
SELECT MEMBER_NAME, GENDER
FROM MEMBER_PROFILE
ORDER BY MEMBER_ID;

2) 내림차순 정렬 (DESC)

SELECT 컬럼명1 컬럼명2, ... FROM 테이블명 ORDER BY 컬럼명 DESC;
SELECT MEMBER_NAME, GENDER
FROM MEMBER_PROFILE
ORDER BY MEMBER_ID DESC;

3) 여러 column 값을 기준으로 정렬

SELECT 컬럼명1 컬럼명2, ... FROM 테이블명 ORDER BY 컬럼명1, 컬럼럼명 2, ...;
SELECT MEMBER_NAME, GENDER
FROM MEMBER_PROFILE
ORDER BY MEMBER_ID, MEMBER_NAME, GENDER;

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

https://school.programmers.co.kr/learn/courses/30/lessons/132203


구현

SELECT DR_NAME, DR_ID, MCDP_CD, DATE_FORMAT(HIRE_YMD, '%Y-%m-%d') AS HIRE_YMD
FROM DOCTOR
WHERE MCDP_CD = 'CS' || MCDP_CD = 'GS'
ORDER BY HIRE_YMD DESC, DR_NAME;

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

https://school.programmers.co.kr/learn/courses/30/lessons/133025



구현

SELECT ICECREAM_INFO.FLAVOR FROM ICECREAM_INFO
JOIN FIRST_HALF ON ICECREAM_INFO.FLAVOR = FIRST_HALF.FLAVOR
WHERE TOTAL_ORDER > 3000 && INGREDIENT_TYPE = 'fruit_based'
ORDER BY TOTAL_ORDER DESC

5. 인기있는 아이스크림

https://school.programmers.co.kr/learn/courses/30/lessons/133024


구현

SELECT FLAVOR FROM FIRST_HALF
ORDER BY TOTAL_ORDER DESC, SHIPMENT_ID;

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

https://school.programmers.co.kr/learn/courses/30/lessons/131112


구현

SELECT FACTORY_ID, FACTORY_NAME, ADDRESS FROM FOOD_FACTORY
WHERE ADDRESS LIKE '%강원도%'
ORDER BY FACTORY_ID;

특정 문자열을 포함하는 데이터 조회 (LIKE)

SELECT 컬럼명1 FROM 테이블명 WHERE 컬럼명2 LIKE '강원도%';
-- 컬럼명2이 '강원도'로 시작되는 데이터 조회

SELECT 컬럼명1 FROM 테이블명 WHERE 컬럼명2 LIKE '%강원도';
-- 컬럼명2이 '강원도'로 끝나는 데이터 조회

SELECT 컬럼명1 FROM 테이블명 WHERE 컬럼명2 LIKE '%강원도%';
-- 컬럼명2에 '강원도'가 포함되는 데이터 조회

7. 12세 이하인 여자 환자 목록 출력하기

https://school.programmers.co.kr/learn/courses/30/lessons/132201


구현

SELECT PT_NAME, PT_NO, GEND_CD, AGE, IFNULL(TLNO, 'NONE') AS TLNO
FROM PATIENT
WHERE AGE <= 12 AND GEND_CD = 'W'
ORDER BY AGE DESC, PT_NAME;

대체 값으로 NULL 처리 (IFNULL)

  • IFNULL(컬럼명, 해당 컬럼 값이 null일 경우 대신 출력할 값)
SELECT IFNULL(TLNO, 'NONE') FROM PATIENT
-- TLNO의 값이 null인 경우 NONE을 출력

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

https://school.programmers.co.kr/learn/courses/30/lessons/144853

구현

SELECT BOOK_ID, DATE_FORMAT(PUBLISHED_DATE, '%Y-%m-%d') AS PUBLISHED_DATE FROM BOOK
WHERE YEAR(PUBLISHED_DATE) = 2021 AND CATEGORY = '인문'
ORDER BY PUBLISHED_DATE;

9. 조건에 부합하는 중고거래 댓글 조회하기

https://school.programmers.co.kr/learn/courses/30/lessons/164673


구현

SELECT
    UGB.TITLE,
    UGB.BOARD_ID,
    UGR.REPLY_ID,
    UGR.WRITER_ID,
    UGR.CONTENTS,
    DATE_FORMAT(UGR.CREATED_DATE, '%Y-%m-%d') AS CREATED_DATE
FROM USED_GOODS_BOARD UGB
JOIN USED_GOODS_REPLY UGR ON UGB.BOARD_ID = UGR.BOARD_ID
WHERE YEAR(UGB.CREATED_DATE) = 2022 && MONTH(UGB.CREATED_DATE) = 10
ORDER BY CREATED_DATE, UGB.TITLE;
profile
알고리즘 블로그 아닙니다.

0개의 댓글