SQL(프로그래머스 스터디 3)

김혜민·2024년 5월 31일

SQL

목록 보기
19/21

1. TRUNC

  • 숫자나 날짜 값을 특정 정밀도로 잘라내는 데 사용

1) 숫자

  • 소수점 이하를 잘라내어 특정 자리까지 표시
TRUNC(number, decimal_places)
* decimal_places: 잘라낼 소수점 이하 자리 수 (생략 가능, 기본값은 0)

ex) Trunc(123.456,2)123.45 
	Trunc(123.456,-1)120

2) 날짜

  • 날짜를 특정 단위로 잘라내어 표시
TRUNC(date,format)
* format: 잘라낼 단위 (생략 가능, 기본값은 'DD')

ex) Trunc(2024-05-31,'YYYY')2024-01-01
	Trunc(2024-05-31,'MM')2024-05-01

2. 그룹화

  • 조건이 있는 상황에서 그룹화를 해야한다면 먼저 조건절에 해당하는 테이블을 먼저 만들어 둔 뒤 Where 을 통해서 합칠 것
Q: REST_INFO 테이블에서 음식종류별로 즐겨찾기수가 가장 많은 식당의 음식 종류, 
ID, 식당 이름, 즐겨찾기수를 조회하는 SQL문을 작성해주세요. 
이때 결과는 음식 종류를 기준으로 내림차순 정렬해주세요.

A : 
SELECT FOOD_TYPE, REST_ID, REST_NAME, FAVORITES
from REST_INFO
where (food_type, favorites) in (select food_type, max(favorites) from rest_info group by food_type)
group by 1
order by FOOD_TYPE desc

오답 : 이렇게 되면 즐겨찾기 수와 식당 이름이 일치하지 않게 됨
SELECT FOOD_TYPE, REST_ID, REST_NAME, max(FAVORITES)
from REST_INFO
group by 1
order by FOOD_TYPE desc

3. Substring

  • 문자열의 일부를 추출하는 데 사용
SUBSTRING(string, start, length)

*string: 원본 문자열
*start: 추출을 시작할 위치(1부터 시작)
*length: 추출할 문자열의 길이

ex) SELECT SUBSTRING('Hello, World!', 8, 5) → World만 출력

4. Join

  • 3개 이상 테이블 조인할때 key 값이 존재한다면 join과 on으로 계속 연결해도 됨
ex) 
select *
from BOOK A
join AUTHOR
on A.BOOK_ID = B.BOOK_ID
join SALES C
on B.AUTHOR_ID = C.AUTHOR_ID

5. 조건절

  • 조건에 해당하는 column을 잘 읽고 where 절에서 우선적으로 조건에 해당하는 테이블 만들어두기
Q: 물고기 종류 별로 가장 큰 물고기의 ID, 물고기 이름, 길이를 출력

A:
select ID, FISH_NAME, LENGTH
from FISH_INFO A
join FISH_NAME_INFO B
on A.FISH_TYPE = B.FISH_TYPE
where (A.FISH_TYPE,LENGTH) in 
(select FISH_TYPE, max(LENGTH) 
 from FISH_INFO
 group by 1)
order by 1

* "물고기 종류"별로 "가장 큰" 물고기 → where 절에서 FISH_TYPE, max(LENGTH)로 우선적으로
조건 만들어두기!
profile
성장하는 주니어 데이터 분석가입니다!

0개의 댓글