항해99 온보딩 스터디[SQL 학습] 17일차

Hohomi·2023년 3월 25일
0
post-thumbnail

스터디 17일차 : SQL 문제 풀이

17일차에는 조원분들과 페어 프로그래밍 방식으로 문제 풀이를 했다. 혼자 푸는 것보다는 같이 푸는 게 훨씬 잼있다.ㅎㅎ 내가 모르는 함수나 새로운 풀이 방법 등을 공유할 수 있어 유익했다. 특히 inner join과 left join의 차이를 정확히 몰라서 답답했었는데, left join을 사용하는 문제를 가져오신 조원분의 풀이 설명 덕분에 확 이해가 되었다. 감사합니다 ☀︎


🌈 LEFT JOIN

오랜 기간 보호한 동물(1)
문제 : 아직 입양을 못 간 동물 중, 가장 오래 보호소에 있었던 동물 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
  • animal_ins 테이블 = 입양소에 있는 동물들
  • animal_outs 테이블 = 입양 간 친구들
  • 문제에서 찾는 것 = 아직 입양을 못 간 동물 친구들
  • 그럼, 무슨 join 방식을 사용해서 연결? -> left
  • 키값 = animal_id = 두 테이블에 동일하게 들어가는 값
  • 입양을 못 간 친구들을 where절을 사용해서 구분
  • order by로 정렬
  • limit으로 값 개수를 설정

ins 테이블에는 있는데 outs 테이블에는 없는 데이터값을 찾기 위해서는 ins 테이블에 outs 테이블을 left join 해야 한다! (어떤 데이터에 null 값이 있는지를 알아야 하므로)


🌈 버림을 위한 TRUNCATE 함수

가격대 별 상품 개수 구하기
문제 : PRODUCT 테이블에서 만원 단위의 가격대 별로 상품 개수를 출력하는 SQL 문을 작성해주세요. 이때 컬럼명은 각각 컬럼명은 PRICE_GROUP, PRODUCTS로 지정해주시고 가격대 정보는 각 구간의 최소금액(10,000원 이상 ~ 20,000 미만인 구간인 경우 10,000)으로 표시해주세요. 결과는 가격대를 기준으로 오름차순 정렬해주세요.

SELECT TRUNCATE(PRICE,-4) AS PRICE_GROUP, COUNT(PRODUCT_ID) AS PRODUCTS
FROM PRODUCT
GROUP BY PRICE_GROUP
ORDER BY PRICE_GROUP
  • truncate 함수는 "TRUNCATE(숫자, 버림 할 자리수)"의 형태로 사용한다. 여기서는 '-4'를 넣음으로써 천원 단위까지의 수들을 모두 버리고 0으로 바꾸었다.
SELECT LEFT(PRICE,1)*10000 AS PRICE_GROUP, COUNT(*) AS PRODUCTS FROM PRODUCT
GROUP BY PRICE_GROUP
ORDER BY PRICE_GROUP
  • left 함수를 사용해 만원 단위의 수를 구한 후 다시 10000을 곱하여 group by를 하는 방법도 있다.



프로그래머스 코딩테스트 연습

profile
게발로 개발하기

0개의 댓글