🚩오늘의 문제는?
SQL - level 3
1.자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기
2.💥💥💥조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기💥💥💥
3.헤비 유저가 소유한 장소
4.💥대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기
5.특정 조건을 만족하는 물고기별 수와 최대 길이 구하기
6.대장균들의 자식의 수 구하기

SELECT DISTINCT A.CAR_ID,
CASE WHEN A.START_DATE <= '2022-10-16' AND A.END_DATE >= '2022-10-16' THEN '대여중'
ELSE '대여 가능'
END AS AVAILABILITY
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY A
WHERE A.END_DATE IN (SELECT MAX(END_DATE)
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID)
ORDER BY A.CAR_ID DESC;

SELECT CONCAT('/home/grep/src/',BOARD_ID,'/',FILE_ID,FILE_NAME,FILE_EXT) AS FILE_PATH
FROM USED_GOODS_FILE A
WHERE A.BOARD_ID = (
SELECT BOARD_ID
FROM USED_GOODS_BOARD
GROUP BY BOARD_ID
ORDER BY VIEWS DESC LIMIT 1)
ORDER BY FILE_ID DESC;


SELECT ID,NAME,HOST_ID
FROM PLACES A
WHERE A.HOST_ID
IN
(SELECT HOST_ID
FROM PLACES
GROUP BY HOST_ID
HAVING COUNT(HOST_ID)>=2);

SELECT MONTH(START_DATE) AS MONTH,CAR_ID, COUNT(*) AS RECORDS
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY A
WHERE A.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(HISTORY_ID)>=5)
GROUP BY MONTH(START_DATE),CAR_ID
ORDER BY MONTH ASC, CAR_ID DESC;
SELECT month(START_DATE) as 'MONTH', CAR_ID, count(*) as 'RECORDS'
from CAR_RENTAL_COMPANY_RENTAL_HISTORY
where CAR_ID in (select CAR_ID
from CAR_RENTAL_COMPANY_RENTAL_HISTORY
where START_DATE >= '2022-08-01' and START_DATE <= '2022-10-31'
group by CAR_ID
having count(*) >= 5)
and START_DATE >= '2022-08-01' and START_DATE <= '2022-10-31'
group by MONTH, CAR_ID
order by MONTH asc, CAR_ID desc;
: 리스트 출력 조건을 자세히 살펴보고 거기에 맞춰서 정답을 구하자..

-- STEP3-2.잡은 수, 최대길이, 물고기 종류 출력
SELECT COUNT(*) AS FISH_COUNT , MAX(LENGTH) AS MAX_LENGTH , FISH_TYPE
FROM FISH_INFO
-- STEP2. FISH_TYPE의 평균 길이가 33CM 이상인 물고기를 종류별로 분류
WHERE FISH_TYPE IN (SELECT NEW_T.FISH_TYPE
-- STEP1. NULL값을 10으로 변경
FROM (SELECT A1.ID,A1.FISH_TYPE, A1.TIME,
CASE WHEN LENGTH IS NULL THEN 10
ELSE LENGTH
END AS LENGTH
FROM FISH_INFO A1) AS NEW_T
GROUP BY NEW_T.FISH_TYPE
HAVING AVG(NEW_T.LENGTH)>=33
)
-- STEP3-1.물고기 종류를 기준으로 값을 출력하기 (이때 물고기 종류에 대해 오름차순으로 정렬)
GROUP BY FISH_TYPE
ORDER BY FISH_TYPE;

#해당 문제의 HINT : ID가 1 & 개체의 자식 ID 3= PARENT_ID : 1 & ID : 3
#-> 여기서 말하는 ID은 PARRENT_ID & 개체의 자식은 ID 라는 점을 확인하기!!!
SELECT A.ID,
-- STEP3. NULL값인 경우 그대로 출력되지 않고 0으로 출력될 수 있도록 CASE 절 활용
CASE WHEN B.CHILD_COUNT IS NULL THEN 0 ELSE CHILD_COUNT END AS CHILD_COUNT
-- STEP2. JOIN 진행 : 이때 자식 기준이 아니라 본 데이터의 ID 을 기준으로 COUNT을 해야하므로 LEFT JOIN
FROM ECOLI_DATA AS A LEFT JOIN (
-- STEP1. ID : PARENT_ID & 개체의 자식 ID : ID
-- 이때 PARENT_ID가 NULL인 경우는 출력할 필요 없으니 WHERE 절 활용
SELECT PARENT_ID AS ID ,COUNT(ID) AS CHILD_COUNT
FROM ECOLI_DATA
WHERE PARENT_ID IS NOT NULL
GROUP BY PARENT_ID
) AS B
ON A.ID=B.ID
select e2.id, count(e1.parent_id) as child_count
from ecoli_data as e1
right join ecoli_data as e2
on e1.parent_id = e2.id
group by e2.id
order by e2.id asc;