SQL

SQL/문제

[프로그래머스] 조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기

문제 풀이SELECT CONCAT('/home/grep/src/',B.BOARD_ID,'/',FILE_ID,FILE_NAME,FILE_EXT) FILE_PATHFROM USED_GOODS_BOARD B INNER JOIN USED_GOODS_FILE F ON B.BOARD_ID = F.BOARD_IDWHERE VIEWS IN (SELECT MAX(VIEWS) FROM USED_GOODS_BOARD)ORDER BY FILE_ID DESC

SQL/문제

[프로그래머스] 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기

문제풀이WITH T1 AS (SELECT CAR_IDFROM CAR_RENTAL_COMPANY_RENTAL_HISTORYWHERE '2022-10-16' BETWEEN START_DATE AND END_DATE)SELECT CAR_ID, IF(CAR_ID IN (SELECT CAR_ID FROM T1), '대여중', '대여 가능') AS AVAILABILITYFROM CAR_RENTAL_COMPANY_RENTAL_HISTORYGROUP BY CAR_IDORDER BY CAR_ID DESC조금 까다로웠음 아니 자꾸 틀리길래 뭔가 했는데 '대여 가능'인데 '대여가능' 이라 써서 그런거였음ㅡㅡ

SQL/문제

[프로그래머스] 조건에 맞는 사용자 정보 조회하기

문제 풀이SELECT USER_ID, NICKNAME, CONCAT(CITY,' ',STREET_ADDRESS1,' ',STREET_ADDRESS2) AS '전체주소', CONCAT(left(TLNO,3),'-',mid(TLNO,4,4),'-',right(TLNO,4)) AS '전화번호' # CONCAT(SUBSTR(TLNO,1,3),'-',SUBSTR(TLNO,4,4),'-',SUBSTR(TLNO,8,4)) AS 전화번호 도 가능FROM USED_GOODS_BOARD B INNER JOIN USED_GOODS_USER U ON B.WRITER_ID = U.USER_IDGROUP BY WRITER_IDHAVING COUNT(WRITER_ID) >= 3ORDER BY..

SQL/문제

[프로그래머스] 없어진 기록 찾기

문제풀이입양을 간 기록은 있는데, 보호소에 들어온 기록이 없어야한다.SELECT ANIMAL_ID, NAMEFROM ANIMAL_OUTS WHERE ANIMAL_ID NOT IN (SELECT ANIMAL_ID FROM ANIMAL_INS)SELECT ANIMAL_ID FROM ANIMAL_INS를 하면 보호소에 들어온 동물 ID가 뽑힌다 SELECT ANIMAL_ID, NAME FROM ANIMAL_OUTS               를 통해 보호소를 나간 동물 ID를 뽑았는데,WHERE ANIMAL_ID NOT IN (보호소에 들어온 동물 ID)          → 그 ID가 보호소에 들어온 ID에는 없음 ⇒ 즉 입양을 간 기록은 있는데, 보호소에 들어온 기록..

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) FROM REST_INFO GROUP BY FOOD_TYPEORDER BY FOOD_TYPE DESC; 이렇게 쿼리를 쳐서 결과를 뽑으면 안되나 할 수도 있지만, 해당 문제는 서브쿼리를 이용해야한다. 서브쿼리를 사용해야하는 이유는 다음과 같음..

SQL/문제

[프로그래머스] 오랜 기간 보호한 동물(2)

문제 풀이SELECT I.ANIMAL_ID, I.NAMEFROM ANIMAL_INS I INNER JOIN ANIMAL_OUTS O ON I.ANIMAL_ID = O.ANIMAL_IDORDER BY (O.DATETIME - I.DATETIME) DESCLIMIT 2 ORDER BY에서 DATETIME으로 계산해서 바로 정렬에 사용하는거 가능두마리를 보여줘야하니까 LIMIT 2

SQL/문제

[프로그래머스] 있었는데요 없었습니다

문제 풀이SELECT I.ANIMAL_ID, I.NAMEFROM ANIMAL_INS I INNER JOIN ANIMAL_OUTS O ON I.ANIMAL_ID = O.ANIMAL_IDWHERE I.DATETIME > O.DATETIME ORDER BY I.DATETIME 결과가 보호 시작일이 빠른 순으로 조회되어야하는데 WHERE절에서 DATETIME 컬럼을 이용해 바로 대소 비교를 해주면 된다. 해당 문제를 DATEDIFF와 TIMEDIFF로 접근하면 틀린다.DATEDIFF 오류 이유DATEDIFF는 말 그대로 날짜 차이를 계산해주는 것이기 때문에, 날짜가 같은데 입양 시간이 느리거나, 빠른 경우를 처리하지 못한다. TIMEDIFF 오류 이유TIMEDIFF로는 테스트 케이스를 넘겼을 수도 있다...

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 자동차별 평균 대여 기간을 구해줘야하기 때문에, CAR_ID로 그룹화를 해주고, 시작 날짜와 끝 날짜의 차이를 구해준다* 주의할 점이 DATE_DIFF로 대여 일수 등의 날짜 차이를 구할 때는 +1를 해줘야한다는 점이다ex. 2023-09-19 부터 2023-9-20일은 이틀 동안 빌린 것임 그리고 그룹화된 집계 결과 ( = AVER..

- MJ -
'SQL' 카테고리의 글 목록