본문 바로가기
반응형

DBMS61

[프로그래머스 SQL] Lv. 2 상품 별 오프라인 매출 구하기 ※ 문제 ※ 코드select p.product_code, p.price * o.summ SALESfrom product p, (select product_id, sum(sales_amount) summ from offline_sale group by product_id) owhere o.product_id = p.product_idorder by SALES desc, p.product_code; ※ 풀이먼저 저희가 최종적으로 원하는 것은 제품 아이디 별 매출액입니다."매출액 = 제품 당 가격 * 매출량" 입니다. 이제 차례대로 하나씩 구해보겠습니다.우선 서브 쿼리를 이용해서 product_id 별 매출량을 구해줍니다. 이때 join을 위하여 product_id와 제품 매출량(sum) co.. 2025. 6. 13.
[프로그래머스 SQL] Lv. 2 ROOT 아이템 구하기 ※ 문제 ※ 코드select i.item_id, item_namefrom item_info i join item_tree t on i.item_id = t.item_idwhere parent_item_id is nullorder by i.item_id;select item_id, item_namefrom item_info i join item_tree t using (item_id)where parent_item_id is nullorder by item_id;※ 풀이해당 문제는 2가지 방법으로 풀 수 있습니다. 1번 - 일반적인 join ~ on ~ 문법으로 풀이 후 column을 explicit하게 표시하는 방법2번 - using (~) 문법을 사용하는 방법 1번 방법은 column name을 명시적.. 2025. 6. 13.
[프로그래머스 SQL] Lv. 2 가격대 별 상품 개수 구하기 ※ 문제 ※ 코드select (price div 10000 * 10000) price_group, count(product_id) productsfrom productgroup by (price div 10000)order by price_group; ※ 풀이가격대 별로 counting 하는 문제였습니다. 가격대 기준은 10,000원 단위였구요. (ex. 1만원대, 11만원대... 등)간단하게 10000으로 나눈 몫으로 grouping을 진행해주면 되겠습니다. 몫을 구하는 방법은 다양하지만 대표적으로 다음 두가지 방법 정도가 있겠네요.1. 나누기 연산(연산자 : /)을 수행한 뒤 int type으로 변환2. DIV 함수를 통해 바로 몫을 계산 저 같은 경우엔 2번 방법으로 편리하게 구했습니다. 2025. 6. 12.
[프로그래머스 SQL] Lv. 2 연도 별 평균 미세먼지 농도 조회하기 ※ 문제 ※ 코드select year(ym) YEAR, round(avg(pm_val1), 2) PM10, round(avg(pm_val2), 2) 'PM2.5'from air_pollutionwhere location2 = '수원'group by year(ym)order by year(ym); ※ 풀이경기도와 같이 상위 분류가 있지만 문제에서 그냥 수원을 찾으라고 했기 때문에 따로 location1에 대한 condition은 넣지 않았습니다. 그리고 group by를 통해 완성해주시면 되겠습니다~ 2025. 6. 10.
[프로그래머스 SQL] Lv. 2 성분으로 구분한 아이스크림 총 주문량 ※ 문제 ※ 코드select ingredient_type, sum(total_order) as total_orderfrom first_half join icecream_info on first_half.flavor = icecream_info.flavorgroup by ingredient_type; ※ 풀이flavor를 key로 join하고 group by를 해주면 됩니다. 2025. 6. 10.
[프로그래머스 SQL] Lv. 2 3월에 태어난 여성 회원 목록 출력하기 ※ 문제 ※ 코드select member_id, member_name, gender, date_format(date_of_birth, '%Y-%m-%d') as DATE_OF_BIRTHfrom member_profilewhere (month(date_of_birth) = 3) and (tlno is not null) and (gender = 'W')order by member_id; ※ 풀이이번 문제부터는 그냥 소문자로 작성하려고 합니다. 굳이 대문자와 인덴트를 고수할 필요가 없는 것 같아서...아무튼 3가지 조건을 맞추어주면 되겠습니다. 각각의 조건이 전부 독립되어 있으니 그냥 조건을 다 달아주면 됩니다. 2025. 6. 10.
[프로그래머스 SQL] Lv. 2 조건에 맞는 도서와 저자 리스트 출력하기 ※ 문제※ 코드SELECT B.BOOK_ID, A.AUTHOR_NAME, DATE_FORMAT(B.PUBLISHED_DATE, '%Y-%m-%d')FROM BOOK B, AUTHOR AWHERE (B.AUTHOR_ID = A.AUTHOR_ID) AND (B.CATEGORY = '경제')ORDER BY B.PUBLISHED_DATE; ※ 풀이따로 join을 위한 조건이 없으니 author_id를 활용하여 inner join 해준 뒤, 경제 카테고리 책을 필터링 해주면 되겠습니다! 2025. 6. 9.
[프로그래머스 SQL] Lv. 2 입양 시각 구하기(1) ※ 문제 ※ 코드SELECT HOUR(DATETIME) HOUR, COUNT(ANIMAL_ID) COUNTFROM ANIMAL_OUTSGROUP BY HOUR(DATETIME)HAVING HOUR BETWEEN 9 AND 19ORDER BY HOUR; ※ 풀이이번 코드는 MySQL의 특이한 특징이 한가지 보입니다. 원래 SQL의 구문 순서는 다음과 같습니다.FROM - WHERE - GROUP BY - HAVING - SELECT - ORDER BY 그렇기 때문에 SELECT 절에서 선언된 ALIAS(AS)는 ORDER BY 절에서만 사용이 가능합니다.그런데 위 문제를 보면 HAVING 절에서 SELECT 절의 별칭을 가져다 쓰고 있는 모습을 볼 수 있습니다.왜냐.. 2025. 6. 9.
[프로그래머스 SQL] Lv. 2 고양이와 개는 몇 마리 있을까 ※ 문제 ※ 코드SELECT ANIMAL_TYPE, COUNT(ANIMAL_TYPE)FROM ANIMAL_INSWHERE ANIMAL_TYPE IN ('Dog', 'Cat')GROUP BY ANIMAL_TYPEORDER BY ANIMAL_TYPE; ※ 풀이사실 해당 문제는 WHERE 절이 없어도 정답 처리가 됩니다. 왜냐하면 제공되는 테이블 자체에 ANIMAL_TYPE이 Dog와 Cat밖에 없어서... ㅎㅎ 2025. 6. 9.
반응형