본문 바로가기

SQL18

[프로그래머스 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.