본문 바로가기

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

SQL lv3 즐겨찾기가 가장 많은 식당 정보 출력하기 with f_cnt as(select food_type, max(favorites) as favoritesfrom rest_infogroup by 1)SELECT r.food_type, r.rest_id, r.rest_name, max(r.favorites)from rest_info rjoin f_cnt f on f.food_type = r.food_type and f.favorites = r.favoritesgroup by 1order by 1 desc 다른문제에서도 겪었던 문제인데 group by 사용했을 때 매핑이 제대로 되지 않아 따로 with문이나 서브쿼리를 이용하여 매핑 진행한 후에 다시 비교하여 일치하는 레코드들만 출력하는 방식으로 문제를 해결했다. 2024. 5. 3.
SQL lv4 언어별 개발자 분류하기 2진법으로 해놓은것을 보니 비트연산자를 사용해야만 할 것 같았다.문제 분류가 group by 로 되어있긴 했는데 group by 거의 안쓰고 풀었다...with fe as(select category, sum(code) as codefrom skillcodesgroup by 1having category = "Front End"),c as (select name , codefrom skillcodeswhere name = "C#"),py as(select name, codefrom skillcodeswhere name = "Python")select case when d.skill_code&f.code and d.skill_code&p.code then "A"when d.skill_code&c.code .. 2024. 5. 2.
SQL lv3 물고기 종류 별 대어 찾기 with mf as (select nn.fish_type, nn.fish_name, max(ii.length) as ltfrom fish_info iijoin fish_name_info nn on nn.fish_type = ii.fish_typegroup by 1, 2)select i.id, mf.fish_name, mf.lt as lengthfrom fish_info ileft join mf mf on (i.length = mf.lt and i.fish_type = mf.fish_type)where mf.lt is not nullorder by 1 with절 사용하지 않으면 id와 함께 group by 해야해서 id 별 길이를 출력해버린다.그래서 id를 제외하고 join 시 길이와 이름을 매핑시키기 위.. 2024. 4. 30.
SQL lv4 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기 문제부터 이해하기 쉽지 않아서 간만에 엄청 오래걸리고 엄청 고민한 문제였다.같이 SQL 스터디 하는 분의 도움을 받아서 겨우 해결했다. 정답코드는 아래와 같다.WITH DIFF AS ( SELECT DISTINCT a.CAR_ID, h.END_DATE, h.START_DATE FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY h JOIN CAR_RENTAL_COMPANY_CAR a ON a.CAR_ID = h.CAR_ID WHERE END_DATE >= '2022-11-01' AND START_DATE = 500000 AND 30 * (c.DAILY_FEE - c.DAILY_FEE * t.DISCOUNT_RATE * 0.01) 처음에는 DIFF 테.. 2024. 4. 29.
SQL lv3 카테고리 별 도서 판매량 집계하기 SELECT B.CATEGORY AS CATEGORY, sum(B_S.SALES) AS TOTAL_SALESFROM BOOK BINNER JOIN BOOK_SALES B_S ON B.BOOK_ID = B_S.BOOK_ID where date_format(B_S.SALES_DATE, "%m") = 1GROUP BY 1ORDER BY 1 asc 1월의 판매량을 구하기 위해 where 절에서 date_format사용해서 필터링 진행했다.카테고리별 합계를 내기 위해 group by와 판매량에 sum 사용했다.카테고리 명 기준으로 오름차순 정렬했다. 2024. 4. 24.
SQL lv4 식품분류별 가장 비싼 식품의 정보 조회하기 테이블이 하나여서 select category, max(price), product_namefrom food_productgroup by 1having category in ("과자", "국", "김치", "식용유")order by 2 desc 로 가볍게 group by 하고 조건 걸어서 필터링 했는데 가장 큰 값과 이름이 출력되지 않고왜인지 다른게 출력되어 고생했다. 데이터분석 데브코스 스터디 함께 하고있는 귀인분의 도움을 받아 with절 응용하여 풀었다.원인으로는 price에는 집계함수가 적용되었지만 product_name에는 적용되지 않아서 였다. with a as (SELECT MAX(PRICE) AS MAX_PRICE, CATEGORYFROM FOOD_PRODUC.. 2024. 4. 24.
SQL lv2 상품 별 오프라인 매출 구하기 SELECT p.PRODUCT_CODE, (p.PRICE * sum(o.SALES_AMOUNT)) as SALESFROM PRODUCT pINNER JOIN OFFLINE_SALE o ON p.PRODUCT_ID = o.PRODUCT_IDgroup by 1order by 2 desc, 1 asc 상품의 판매 갯수를 구하기 위해 sum으로 묶고 가격을 곱했다.매출액 기준으로 내림차순 정렬 하고 코드 기준으로 오름차순 정렬 했다.더 깔끔한 쿼리가 있을 것 같다. 2024. 4. 24.
SQL lv3 조건에 맞는 사용자와 총 거래금액 조회하기 SELECT u.USER_ID, u.NICKNAME, sum(b.PRICE) AS TOTAL_SALES FROM USED_GOODS_BOARD b JOIN USED_GOODS_USER u on b.WRITER_ID = u.USER_ID WHERE b.STATUS = "DONE" GROUP BY 1, 2 HAVING TOTAL_SALES >= 700000 ORDER BY TOTAL_SALES 총 거래금액을 조회하기 위해 sum 사용했다. 완료된 거래를 WHERE b.STATUS = "DONE" 사용하여 필터링 했다. 그룹화 된 user, nickname 의 총 거래금액이 70만원 이상이어야 하기 때문에 where절이 아닌 having 절에 조건문 사용했다. 2024. 4. 22.
SQL lv3 대여 기록이 있는 자동차 리스트 구하기 SELECT distinct(c.CAR_ID) FROM CAR_RENTAL_COMPANY_CAR c JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY h on c.CAR_ID = h.CAR_ID WHERE date_format(h.START_DATE, '%m') = 10 AND c.CAR_TYPE = "세단" ORDER BY 1 DESC CAR_ID 조회 시 중복이 없게 하기 위해 distinct 사용했다. 10월에 대여를 시작한 자동차를 조회하기 위해 date_format으로 10월인 것을 필터링 하고 비교연산자로 세단만 필터링 하여 내림차순 정렬했다. 2024. 4. 22.