MySQL 45

[MySQL] 프로그래머스 - 5월 식품들의 총매출 조회하기

& 테이블 구조 SELECT P.PRODUCT_ID, P.PRODUCT_NAME, SUM(O.AMOUNT) * P.PRICE AS TOTAL_SALES FROM FOOD_PRODUCT AS P JOIN FOOD_ORDER AS O ON P.PRODUCT_ID = O.PRODUCT_ID WHERE O.PRODUCE_DATE BETWEEN '2022-05-01' AND '2022-05-31' GROUP BY PRODUCT_ID ORDER BY 3 DESC, 1 ASC; 다른 Level.4 의 문제들에 비해선 간단한 문제였다.. 기존에 있던 개념들을 활용 하는 거였기 때문 그러나.. PRODUCE_DATE 기간을 05-01 부터 05-30 으로 설정해서 계속 틀렸다.. (5월 말일은 31일) 전형적인 휴먼에러..

IT/SQL 2024.01.24

[MySQL] 프로그래머스 - 식품분류별 가장 비싼 식품의 정보 조회하기

테이블 구조 SELECT CATEGORY, PRICE AS MAX_PRICE, PRODUCT_NAME FROM FOOD_PRODUCT WHERE CATEGORY IN ('과자', '국', '김치', '식용유') AND PRICE IN (SELECT MAX(PRICE) FROM FOOD_PRODUCT GROUP BY CATEGORY) ORDER BY PRICE DESC; WHERE절 내 서브쿼리를 두는 문제였다. SELECT절에 MAX(PRICE)를 두는 걸로 푸는 문제라고 오해할 수 있으나, SELECT절에 집계 함수를 사용하면 해당 컬럼 값으로는 집계함수 반환값만 표출 된다. 또한 서브쿼리에서 SELECT 절이 아닌 HAVING 절에 집계함수를 사용하게 되면 결과셋에 나타나는 값이 PRODUCT_ID에..

IT/SQL 2024.01.24

[MySQL] 프로그래머스 - 보호소에서 중성화한 동물

& 테이블 구조 SELECT I.ANIMAL_ID, I.ANIMAL_TYPE, I.NAME FROM ANIMAL_INS AS I LEFT JOIN ANIMAL_OUTS AS O ON I.ANIMAL_ID = O.ANIMAL_ID WHERE I.SEX_UPON_INTAKE LIKE 'Intact%' AND I.ANIMAL_ID in (SELECT ANIMAL_ID FROM ANIMAL_OUTS WHERE SEX_UPON_OUTCOME LIKE 'Spayed%' OR SEX_UPON_OUTCOME LIKE 'Neutered%') ORDER BY 1 지난번에 풀이한 ANIMAL_INS 테이블 유실 사건 케이스와 비슷하다. 다만 이번에는 IN 테이블을 기준으로 OUT 테이블을 LEFT JOIN 하였다. 그리고 ..

IT/SQL 2024.01.24

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

테이블 구조 SELECT MONTH(START_DATE) AS MONTH, CAR_ID, COUNT(*) AS RECORDS FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY WHERE START_DATE BETWEEN '2022-08-01' AND '2022-10-31' AND CAR_ID IN (SELECT CAR_ID FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY WHERE START_DATE BETWEEN '2022-08-01' AND '2022-10-31' GROUP BY CAR_ID HAVING COUNT(CAR_ID) >= 5 ) GROUP BY MONTH(START_DATE), CAR_ID HAVING RECORDS > 0 ORDER BY MONT..

IT/SQL 2024.01.24

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

& 테이블 구조 SELECT concat('/home/grep/src/', F.BOARD_ID, '/', FILE_ID,FILE_NAME, FILE_EXT) AS FILST_PATH FROM USED_GOODS_FILE AS F LEFT JOIN USED_GOODS_BOARD AS B ON F.BOARD_ID = B.BOARD_ID WHERE VIEWS = (SELECT MAX(VIEWS) FROM USED_GOODS_BOARD) ORDER BY FILE_ID DESC; 지난번에 풀었던 문제들의 짬뽕이었다. (concat 함수 + 외부조인 + where절에 서브쿼리 사용) 조금 다른 점은 WHERE 절내 서브 쿼리에서 사용된 집계 함수가 HAVING 절이 아닌 SELECT 절에서 바로 사용되었다는 점이다..

IT/SQL 2024.01.24

[MySQL] 프로그래머스 - 헤비 유저가 소유한 장소

테이블 구조 SELECT * FROM PLACES WHERE HOST_ID in (SELECT HOST_ID FROM PLACES GROUP BY HOST_ID HAVING COUNT(HOST_ID) >= 2) ORDER BY ID WHERE COUNT(HOST_ID) >= 2 만 있는 3줄짜리 SQL 문으로 간단하게 생각이 들었으나 생각해보니 그러면 'PLACES 테이블에서 host_id 컬럼의 count 값이 2 이상이면 모든걸 다 출력해줘' 가 되는 상황이었다. 이래서 집계함수 (count 함수 같은) 는 where 절에 쓸 경우 group 절을 사용해야 하는구나 를 다시 한번 느꼈다! 그래서 where 절에 GROUP 과 HAVING을 사용한 서브쿼리를 사용하였다. * 집계 함수 : SUM() ,..

IT/SQL 2024.01.24

[MySQL] 프로그래머스 - 자동차 대여 기록에서 대여 중 / 대여 가능 여부 구분하기

테이블 구조 SELECT CAR_ID, MAX(CASE WHEN '2022-10-16' BETWEEN START_DATE AND END_DATE THEN '대여중' WHEN END_DATE IS NULL THEN '대여중' ELSE '대여 가능' END) AS AVAILABILITY FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY GROUP BY CAR_ID ORDER BY CAR_ID DESC; 처음에는 간단하게 SELECT 절에 CASE-WHEN-ELSE 절을 사용하여 풀이하는 문제인줄 알았다. 하지만 오답으로 나와 다른 글들을 확인해보니 CASE 절에 MAX() 함수를 사용해야 했다.. 왜냐하면 CAR_ID 값들 중 가장 최신 값들로만 비교해야 하기 때문! 풀수록 재밌고 신기한..

IT/SQL 2024.01.23

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

& 테이블 구조 SELECT U.USER_ID, U.NICKNAME, CONCAT(U.CITY, ' ', U.STREET_ADDRESS1, ' ', U.STREET_ADDRESS2) AS 전체주소, CONCAT(SUBSTRING(U.TLNO, 1, 3), '-', SUBSTRING(U.TLNO, 4, 4), '-', SUBSTRING(U.TLNO, 8)) AS 전화번호 FROM USED_GOODS_USER AS U JOIN USED_GOODS_BOARD AS B ON U.USER_ID = B.WRITER_ID GROUP BY U.USER_ID HAVING COUNT(B.WRITER_ID) >= 3 ORDER BY U.USER_ID DESC; 문제에서 요구하는 조건을 구하는것보단 값을 concat과 sub..

IT/SQL 2024.01.23

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

& 테이블구조 SELECT O.ANIMAL_ID AS ANIMAL_ID, O.NAME AS NAME FROM ANIMAL_OUTS AS O LEFT JOIN ANIMAL_INS AS I ON O.ANIMAL_ID = I.ANIMAL_ID WHERE I.ANIMAL_ID is null; 문제의 핵심은 입양을 간 기록은 있다는 점이다! 그러므로 ANIMAL_OUTS 테이블에서 유실된 데이터는 없기 때문에 OUTS 테이블을 기준으로 잡고 왼쪽 외부 조인을 하였다. 그 후 조인한 테이블 중 I.ANIMAL_ID 이 null 값인 값들을 찾으면 된다. (OUTS에 기록이 있으면 무조건 INS는 있어야 하기 때문) 출처 : 프로그래머스 - 없어진 기록 찾기

IT/SQL 2024.01.23

[MySQL] 프로그래머스 - 즐겨찾기가 가장 많은 식당 정보 출력하기

테이블 구조 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; WHERE 절에 서브쿼리를 넣었어야 풀 수 있는 문제였다.. 만약 SELECT 절에 그냥 max(FAVORTITES)를 한다면 FAVORITES 값만 맥스로 나오고, 해당 음식 분야에 값과 실제로는 다른 값이 나오게 된다! (해당 부분에서 매우 애를 먹었따..) 아직은 서브쿼리를 어느 경우에 사용해야 하는지 자세히 구분하고 있지 못하는것 같다.. 출처 : 프로..

IT/SQL 2024.01.23