문제풀이13 [해커랭크] SQL 심화 응용 팁들 1. SELECT 서비스쿼리에서 where 조건으로 필터링https://www.hackerrank.com/challenges/the-company/problem?isFullScreen=true select a.company_code, a.founder,(select count(distinct lead_manager_code) from lead_manager where company_code = a.company_code),(select count(distinct senior_manager_code) from senior_manager where company_code = a.company_code),(select count(distinct manager_code) from manager where com.. 2024. 9. 24. [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 FEEFROM CAR_RENTAL_COMPANY_CAR CJOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY HON C.CAR_ID = H.CAR_IDJOIN CAR_RENTAL_COMPANY_DISCOUNT_PLAN PON C.CAR_TYPE = P.CAR_TYPEWHERE C.CAR_TYPE IN ('세단', 'SUV')AND C.CAR_ID NOT IN ( SELECT CAR_ID FROM CAR_RENTA.. 2023. 8. 14. [프로그래머스 SQL]조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기 정답쿼리SELECT CONCAT('/HOME/GREP/SRC/', F.BOARD_ID, '/',FILE_ID, FILE_NAME, FILE_EXT) AS FILE_PATHFROM USED_GOODS_FILE FJOIN USED_GOODS_BOARD BON F.BOARD_ID = B.BOARD_IDWHERE 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 값 하나만 추출하게 된다. 이를 W.. 2023. 8. 8. [프로그래머스 SQL] 오랜 기간 보호한 동물(2) 정답 쿼리SELECT I.ANIMAL_ID, I.NAMEFROM ANIMAL_INS IJOIN ANIMAL_OUTS OON I.ANIMAL_ID = O.ANIMAL_IDORDER BY DATEDIFF(O.DATETIME, I.DATETIME) DESCLIMIT 2; 해설FROM ANIMAL_INS IJOIN ANIMAL_OUTS OON I.ANIMAL_ID = O.ANIMAL_ID이 문제는 '입양을 간 동물' 중에 보호 기간이 길었던 동물을 찾는 문제이다. '입양을 간 동물'만 필터링하기 위해서는 입양을 보낸 날짜가 NULL값이 아니어야 한다. 즉, ANIMAL_OUTS의 DATETIME이 결측치가 아니어야 한다. 이는 INNER JOIN을 쓰면, 쉽게 해결할 수 있다. INEER JOIN을 쓰면 들어왔.. 2023. 8. 7. [프로그래머스 SQL] 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기 정답쿼리SELECT MONTH(START_DATE) AS MONTH, CAR_ID, COUNT(HISTORY_ID) AS RECORDSFROM CAR_RENTAL_COMPANY_RENTAL_HISTORYWHERE 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.. 2023. 8. 3. [프로그래머스 SQL] 자동차 평균 대여 기간 구하기 정답쿼리SELECT CAR_ID, ROUND(AVG(DATEDIFF(END_DATE, START_DATE)+1), 1) AS AVERAGE_DURATIONFROM CAR_RENTAL_COMPANY_RENTAL_HISTORYGROUP BY CAR_IDHAVING AVERAGE_DURATION >= 7ORDER BY AVERAGE_DURATION DESC, CAR_ID DESC 설명날짜 차이를 어떻게 계산해야하는지 알아야 풀 수 있는 문제였다.ROUND(AVG(DATEDIFF(END_DATE, START_DATE)+1), 1)DATEDIFF(시작 날짜, 마지막 날짜)DATDIFF라는 함수에 시작 날짜와 마지막 날짜에 해당하는 Column을 넣어주면, 두 날짜간의 차이를 구할 수 있다. 여기에 +1을 해준 .. 2023. 8. 2. [프로그래머스 SQL] 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기 정답쿼리SELECT car_id, max(if('2022-10-16' between start_date and end_date, '대여중','대여 가능')) as AVAILABILITYfrom car_rental_company_rental_historygroup by car_idorder 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, FAVORITESFROM rest_infoWHERE (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 FAVORITESfrom rest_infoGROUP BY F.. 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 & C.. 2023. 6. 15. [프로그래머스] 피자나눠먹기(2) - 파이썬(최대공약수, 최소공배수) 프로그래머스 코딩테스트 입문에서 Lv0에서나오는 피자나눠먹기(2) 문제이다. 피자는 6조각으로 나눠주고, n명의 사람이 한조각도 남김없이 똑같이 나눠먹어야하는 문제이다. 파이썬으로 최대공약수, 최소공배수를 구하는 함수를 만들어서 풀이했다. * 이어드림스쿨 3기 참여하면서 진행하고 있는 스터디원 분이 작성한 코드를 제가 풀이한 내용입니다.(23년 6월 7일 코드리뷰 스터디 발표내용) 기존 코드# day4 피자나눠먹기(2) 기존 Codedef 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).. 2023. 6. 8. 이전 1 2 다음