본문 바로가기
문제풀이/SQL(My sql)

[문제풀이] 루시와 엘라 찾기/성분으로 구분한 아이스크림 총 주문량

by kime2 2024. 1. 9.

 

출처

문제

동물 보호소에 들어온 동물 중 이름이 Lucy, Ella, Pickle, Rogan, Sabrina, Mitty인 동물의 아이디와 이름, 성별 및 중성화 여부를 조회하는 SQL 문을 작성해주세요.

문제에 대한 해석

1. 이름 포함: Lucy, Ella, Pickle, Rogan, Sabrina, Mitty

2. 조회: 아이디와 이름, 성별 중성화 여부

 

풀이(MYSQL)

select animal_id, name, sex_upon_intake
from animal_ins
where name in ('Lucy','Ella','Pickle','Rogan','Sabrina','Mitty')

작동순서

💡SQL 실행 순서는 From -> Where -> Group by -> Having -> Select -> Order by ->결과반환

select animal_id, name, sex_upon_intake
from animal_ins
where name in ('Lucy','Ella','Pickle','Rogan','Sabrina','Mitty')

  1. FROM 절: animal_ins테이블 에서
  2. WHERE 절: name컬럼에서 Lucy','Ella','Pickle','Rogan','Sabrina','Mitty'중에 하나라도 포함된데이터 필터링
  3. SELECT 절: animal_id, name, sex_upon_intake 조회

 


출처

 

문제

상반기 동안 각 아이스크림 성분 타입과 성분 타입에 대한 아이스크림의 총주문량을 총주문량이 작은 순서대로 조회하는 SQL 문을 작성해주세요. 이때 총주문량을 나타내는 컬럼명은 TOTAL_ORDER로 지정해주세요.

문제에 대한 해석

1. 테이블 조인

2. 아이스크림 성분 타입 그룹함수

3. 주문량 집계함수

4. 주문량 오름차순

풀이(MYSQL)

select info.ingredient_type, sum(half.total_order) as total_order
from first_half half join icecream_info info on half.flavor = info.flavor
group by info.ingredient_type
order by total_order

작동순서

💡SQL 실행 순서는 From -> Where -> Group by -> Having -> Select -> Order by ->결과반환

 

  1. FROM, JOIN절: 상방기 아이스크림 판매를 나타내는  first_half테이블과 아이스크림 정보를 나타내는 icecream_info를 flavor을 기준으로 join
  2. GROUP BY 절: 성분에 따른 데이터를 조회하기 위해 ingredient_type 그룹화
  3. SELECT 절: ngredient_type과 ngredient_type에 따른 half.total_order의 합계를 total_order로 지정하여 조회
  4. ORDER BY 절:total_order의 오름차순

 

다른사람 풀이

SELECT B.INGREDIENT_TYPE, SUM(A.TOTAL_ORDER) AS TOTAL_ORDER 
FROM FIRST_HALF AS A, ICECREAM_INFO AS B
WHERE A.FLAVOR = B.FLAVOR
GROUP BY B.INGREDIENT_TYPE
ORDER BY TOTAL_ORDER ASC

배운점

  • 만약, 문제에 INGREDIENT_TYPE=sugar인 것을 조회하는 쿼리가 추가되었을때 on절을 사용한 쿼리는 조인실행 후 조인 결과로 생성된 테이블에서 where절을 추가해 sugar인 행들을 찾는다
  • 다른사람풀이의 where절로 조인을 할 경우 WHERE A.FLAVOR = B.FLAVOR and  INGREDIENT_TYPE=sugar로 수정하여 조인실행시  INGREDIENT_TYPE=sugar인 테이블과 조인한다
  • 결과적으로 같은 결과지만 쿼리1(내가쓴)에서 조건을 나중에 걸어주는 것이고 쿼리2(다른사람)에서는 미리 조건을 걸어주어 원하는 테이블만 조건을 걸기 때문에 성능적인 면에서 주번째 쿼리가 용량을 덜 차지한다
  • 그렇다면 join절보다 유리한 where로 조인하는 습관을 들여야 하는 것인가..?
  • 예: https://seulhee030.tistory.com/57