USED_GOODS_BOARD
와 USED_GOODS_FILE
테이블에서 조회수가 가장 높은 중고거래 게시물에 대한 첨부파일 경로를 조회하는 SQL문을 작성해주세요. 첨부파일 경로는 FILE ID를 기준으로 내림차순 정렬해주세요. 기본적인 파일경로는 /home/grep/src/ 이며, 게시글 ID를 기준으로 디렉토리가 구분되고, 파일이름은 파일 ID, 파일 이름, 파일 확장자로 구성되도록 출력해주세요. 조회수가 가장 높은 게시물은 하나만 존재합니다.제출한 쿼리 :
SELECT CONCAT('/home/grep/src/', BOARD_ID, '/', FILE_ID, FILE_NAME, FILE_EXT) AS "FILE_PATH"
FROM USED_GOODS_FILE
WHERE BOARD_ID = (
SELECT BOARD_ID
FROM USED_GOODS_BOARD
ORDER BY VIEWS DESC
LIMIT 1
)
ORDER BY FILE_ID DESC;
제출한 쿼리 :
WITH A AS (
SELECT *
FROM JULY
UNION ALL
SELECT *
FROM FIRST_HALF
)
SELECT FLAVOR
FROM A
GROUP BY FLAVOR
ORDER BY SUM(TOTAL_ORDER) DESC
LIMIT 3;
풀이 방법은 알겠는데 막상 정답이 안 나와서 너무 헤맸다... JOIN으로 풀다가 결국에는 UNION으로 풂
2022년 1월
의 도서 판매 데이터를 기준으로 저자 별, 카테고리 별 매출액(TOTAL_SALES = 판매량 * 판매가
) 을 구하여, 저자 ID(AUTHOR_ID
), 저자명(AUTHOR_NAME
), 카테고리(CATEGORY
), 매출액(SALES
) 리스트를 출력하는 SQL문을 작성해주세요.제출한 쿼리 :
SELECT A.AUTHOR_ID
, A.AUTHOR_NAME
, B.CATEGORY
, SUM(S.SALES * B.PRICE) AS "TOTAL_SALES"
FROM BOOK AS B
INNER JOIN BOOK_SALES AS S
ON B.BOOK_ID = S.BOOK_ID
INNER JOIN AUTHOR AS A
ON B.AUTHOR_ID = A.AUTHOR_ID
WHERE DATE_FORMAT(SALES_DATE, "%Y-%m") LIKE "2022-01"
GROUP BY A.AUTHOR_ID, B.CATEGORY
ORDER BY AUTHOR_ID ASC, CATEGORY DESC;
이제 이런 유형의 문제는 잘 푸는 듯(서브쿼리만 안 써도 된다면...) 그냥 문제 조건에 맞춰서 필터링/조건 걸어줄 것 걸어주고 쭉 써내려가면 끝이니까. 근데 서브쿼리... 사실 서브쿼리 언제, 왜, 어떻게 써야 하는 이유도 모르겠음. 그냥 한번 필터링한 결과를 다시 조건에 맞춰서 필터링 해야 해서 쓰는건가? 아님 단순히 WHERE절, HAVING절로는 부족해서? 아님 그냥 조건이 여러개니까? 하라면 할 수는 있겠는데......... 뭔가 깔끔하게 해결되지 않는 기분이다ㅋㅋㅋ
CAR_RENTAL_COMPANY_RENTAL_HISTORY
테이블에서 대여 시작일을 기준으로 2022년 8월부터 2022년 10월까지 총 대여 횟수가 5회 이상인 자동차들에 대해서 해당 기간 동안의 월별 자동차 ID 별 총 대여 횟수(컬럼명: RECORDS) 리스트를 출력하는 SQL문을 작성해주세요. 결과는 월을 기준으로 오름차순 정렬하고, 월이 같다면 자동차 ID를 기준으로 내림차순 정렬해주세요. 특정 월의 총 대여 횟수가 0인 경우에는 결과에서 제외해주세요.제출한 쿼리 :
WITH A AS (
SELECT CAR_ID, COUNT(CAR_ID) AS rental_count
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE MONTH(START_DATE) BETWEEN 8 AND 10
GROUP BY CAR_ID
HAVING COUNT(CAR_ID) >= 5
)
SELECT MONTH(START_DATE) AS "rental_month"
, CAR_ID
, COUNT(CAR_ID) AS "records"
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE (MONTH(START_DATE) BETWEEN 8 AND 10)
AND (CAR_ID IN (SELECT A.CAR_ID FROM A))
GROUP BY CAR_ID, MONTH(START_DATE)
HAVING COUNT(CAR_ID) != 0
ORDER BY rental_month ASC, CAR_ID DESC;
어찌저찌 풀긴 풀었는데... 역시나 서브쿼리/WITH 구문 써야하는 이유를 완전히 납득하지는 못 하겠어서 지피티 선생님한테 물어봄.
아... 좀 납득이 간다 이제(과연...ㅋ 하루 지나면 또 납득 못 할듯)
MEMBER_PROFILE
와 REST_REVIEW
테이블에서 리뷰를 가장 많이 작성한 회원의 리뷰들을 조회하는 SQL문을 작성해주세요. 회원 이름, 리뷰 텍스트, 리뷰 작성일이 출력되도록 작성해주시고, 결과는 리뷰 작성일을 기준으로 오름차순, 리뷰 작성일이 같다면 리뷰 텍스트를 기준으로 오름차순 정렬해주세요.제출한 쿼리 :
SELECT P.MEMBER_NAME
, R.REVIEW_TEXT
, DATE_FORMAT(R.REVIEW_DATE, '%Y-%m-%d') AS "REVIEW_DATE"
FROM MEMBER_PROFILE AS P
INNER JOIN REST_REVIEW AS R
ON P.MEMBER_ID = R.MEMBER_ID
WHERE P.MEMBER_ID = (SELECT MEMBER_ID
FROM REST_REVIEW
GROUP BY MEMBER_ID
ORDER BY COUNT(*) DESC LIMIT 1)
ORDER BY REVIEW_DATE asc, REVIEW_TEXT asc;
오늘의 TMI
오늘 새벽 최강야구 보고 심장 떨려서 잠 못잠;;;;;; 직관 피켓팅 도전간다,,,
야구 재밌는 거였구나?