본문 바로가기

코딩테스트12

[solvesql]쇼핑몰의 일일 매출액과 ARPPU solvesql 사이트의 쇼핑몰의 일일 매출액과 ARPPU 문제 정답과 풀이이다. 난이도는 3단계였고, 한번에 정답을 맞췄다. 풀이하면서 쿼리 수행시간을 최대한 낮추려고 신경쓰면서 풀었다. 난이도 : 3풀이시간 : 15분수행시간 : 0.998초https://solvesql.com/problems/daily-arppu/  정답 쿼리select date(order_purchase_timestamp) as dt, count(*) as pu, round(sum(revenue),2) as revenue_daily, round(sum(revenue)/count(*),2) as arppufrom olist_orders_dataset aleft join (select order_id, sum(.. 2024. 7. 11.
[solvesql] 할부는 몇개월로 해드릴까요 해설 solvesql 할부는 몇개월로해드릴까요 sql 문제 정답 및 해설입니다. 문제 : https://solvesql.com/problems/installment-month/ 정답select payment_installments, count(distinct order_id) as order_count, min(payment_value) as min_value, max(payment_value) as max_value, avg(payment_value) as avg_valuefrom olist_order_payments_datasetwhere payment_type = 'credit_card'group by payment_installments;  해설정답률이 매우 낮길래 어렵나 하고 문제를 풀.. 2024. 7. 7.
[프로그래머스 SQL] 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기 정답 쿼리 SELECT DISTINCT(C.CAR_ID), C.CAR_TYPE, ROUND(DAILY_FEE * 30 - (DAILY_FEE * 30 * (DISCOUNT_RATE/100))) AS FEE FROM CAR_RENTAL_COMPANY_CAR C JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY H ON C.CAR_ID = H.CAR_ID JOIN CAR_RENTAL_COMPANY_DISCOUNT_PLAN P ON C.CAR_TYPE = P.CAR_TYPE WHERE C.CAR_TYPE IN ('세단', 'SUV') AND C.CAR_ID NOT IN ( SELECT CAR_ID FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY WHERE START_D.. 2023. 8. 14.
[프로그래머스 SQL]조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기 정답쿼리 SELECT CONCAT('/HOME/GREP/SRC/', F.BOARD_ID, '/',FILE_ID, FILE_NAME, FILE_EXT) AS FILE_PATH FROM USED_GOODS_FILE F JOIN USED_GOODS_BOARD B ON F.BOARD_ID = B.BOARD_ID WHERE VIEWS = (SELECT MAX(VIEWS) FROM USED_GOODS_BOARD) ORDER BY F.FILE_ID DESC; 해설 이번 문제는 ORDER BY VIEWS \ LIMIT 1; 이렇게 작성하면 안 되나? 헷갈렸던 문제였다. SELECT MAX(VIEWS) FROM USED_GOODS_BOARD 쿼리를 이렇게 작성하면, 조회수가 가장 높은 VIEWS 값 하나만 추출하게 된다.. 2023. 8. 8.
[프로그래머스 SQL] 오랜 기간 보호한 동물(2) 정답 쿼리 SELECT I.ANIMAL_ID, I.NAME FROM ANIMAL_INS I JOIN ANIMAL_OUTS O ON I.ANIMAL_ID = O.ANIMAL_ID ORDER BY DATEDIFF(O.DATETIME, I.DATETIME) DESC LIMIT 2; 해설 FROM ANIMAL_INS I JOIN ANIMAL_OUTS O ON I.ANIMAL_ID = O.ANIMAL_ID 이 문제는 '입양을 간 동물' 중에 보호 기간이 길었던 동물을 찾는 문제이다. '입양을 간 동물'만 필터링하기 위해서는 입양을 보낸 날짜가 NULL값이 아니어야 한다. 즉, ANIMAL_OUTS의 DATETIME이 결측치가 아니어야 한다. 이는 INNER JOIN을 쓰면, 쉽게 해결할 수 있다. INEER JO.. 2023. 8. 7.
[프로그래머스 SQL] 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기 정답쿼리 SELECT MONTH(START_DATE) AS MONTH, CAR_ID, COUNT(HISTORY_ID) AS RECORDS FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY WHERE CAR_ID IN ( SELECT CAR_ID FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY WHERE (DATE_FORMAT(START_DATE, '%Y-%m') BETWEEN '2022-08' AND '2022-10') GROUP BY CAR_ID HAVING COUNT(CAR_ID) >= 5 ) AND (DATE_FORMAT(START_DATE, '%Y-%m') BETWEEN '2022-08' AND '2022-10') GROUP BY MONTH(START_DA.. 2023. 8. 3.
[프로그래머스 SQL] 자동차 평균 대여 기간 구하기 정답쿼리 SELECT CAR_ID, ROUND(AVG(DATEDIFF(END_DATE, START_DATE)+1), 1) AS AVERAGE_DURATION FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY GROUP BY CAR_ID HAVING AVERAGE_DURATION >= 7 ORDER BY AVERAGE_DURATION DESC, CAR_ID DESC 설명 날짜 차이를 어떻게 계산해야하는지 알아야 풀 수 있는 문제였다. ROUND(AVG(DATEDIFF(END_DATE, START_DATE)+1), 1) DATEDIFF(시작 날짜, 마지막 날짜) DATDIFF라는 함수에 시작 날짜와 마지막 날짜에 해당하는 Column을 넣어주면, 두 날짜간의 차이를 구할 수 있다. 여기에.. 2023. 8. 2.
[프로그래머스 SQL] 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기 정답쿼리 SELECT car_id, max(if('2022-10-16' between start_date and end_date, '대여중','대여 가능')) as AVAILABILITY from car_rental_company_rental_history group by car_id order by car_id desc; 설명 2022-10-16일의 조건을 맞추는게 조금 까다로운 문제였다. 쿼리를 하나하나 쪼개서 살펴보겠다. if('2022-10-16' between start_date and end_date, '대여중', '대여 가능') if (조건문, 참일 때 반환하는 값, 거짓일 때 반환하는 값) '2022-10-16'일이 start_date와 end_date 사이에 있으면, '대여중'을 반환하고.. 2023. 7. 31.
[프로그래머스 SQL] 즐겨찾기가 가장 많은 식당 정보 출력하기 정답코드 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) ORDER BY food_type desc; 설명 아마도 이 글을 클릭 한 사람이라면, 아래와 같이 코드를 짜서 오류가 났을 가능성이 클 것같다. SELECT FOOD_TYPE, REST_ID, REST_NAME, MAX(FAVORITES) AS FAVORITES from rest_info GROUP BY FOOD_TYPE ORDER BY food_type desc; 이렇게 짜게 되면, FOOD_TYPE에 .. 2023. 7. 27.
[프로그래머스] 진료순서 정하기 - 파이썬(index함수) 리스트에 담긴 숫자가 큰 순서대로 순위를 리스트 형태로 출력하는 문제이다. 코드 제출하고 보니 가장 많은 표를 받은 코드와 똑같아서 가져왔다. * 이어드림스쿨 3기 참여하면서 진행하고 있는 스터디에서 발표한 내용입니다. (23년 6월 14일 코드리뷰 스터디 발표내용) 기존 코드 # Day08 진료순서정하기 self 기존 Code def solution(emergency): # emergency 숫자 하나씩 뽑아서(e) 내림차순 정렬시킨 emergency기준으로 인덱스(e) +1을 출력 return [sorted(emergency, reverse=True).index(e)+1 for e in emergency] 코드 풀이 # Day08 진료순서정하기 self 기존 Code 보안/개선한 Code & Code.. 2023. 6. 15.
[프로그래머스] 피자나눠먹기(2) - 파이썬(최대공약수, 최소공배수) 프로그래머스 코딩테스트 입문에서 Lv0에서나오는 피자나눠먹기(2) 문제이다. 피자는 6조각으로 나눠주고, n명의 사람이 한조각도 남김없이 똑같이 나눠먹어야하는 문제이다. 파이썬으로 최대공약수, 최소공배수를 구하는 함수를 만들어서 풀이했다. * 이어드림스쿨 3기 참여하면서 진행하고 있는 스터디원 분이 작성한 코드를 제가 풀이한 내용입니다.(23년 6월 7일 코드리뷰 스터디 발표내용) 기존 코드 # day4 피자나눠먹기(2) 기존 Code def gcd(a, b): if b == 0: return a return gcd(b, a%b) def lcm(a, b): # 최소공배수 return a*b // gcd(a, b) def solution(n): return lcm(n,6) / 6 코드 풀이 # day4 .. 2023. 6. 8.
[프로그래머스] 최빈값 구하기 - 파이썬(Counter) 프로그래머스 코딩테스트 입문에서 Lv0에서나오는 최빈값 구하기 문제이다. array리스트 나오는 숫자 중에 최빈값을 리턴하는 문제이다. 파이썬의 Counter 함수를 활용했다. * 이어드림스쿨 3기 참여하면서 진행하고 있는 스터디원 분이 작성한 코드를 제가 풀이한 내용입니다.(23년 6월 7일 코드리뷰 스터디 발표내용) 기존 코드 # Day3 최빈값구하기 from collections import Counter def solution(arr): cnt = Counter(arr) modes = [k for k, v in cnt.items() if v == max(cnt.values())] return modes[0] if len(modes) == 1 else -1 코드 풀이 # Day3 최빈값구하기 Cod.. 2023. 6. 8.