MySQL/프로그래머스/3/299307. 대장균의 크기에 따라 분류하기 1
select ID,
if(size_of_colony<=100, 'LOW', if(size_of_colony<=1000, 'MEDIUM','HIGH')) as SIZE
from ecoli_data
order by id;
MySQL/프로그래머스/4/131118. 서울에 위치한 식당 목록 출력하기
select
i.rest_id as REST_ID,
i.rest_name as REST_NAME,
i.food_type as FOOD_TYPE,
i.favorites as FAVORITES,
i.address as ADDRESS,
round(avg(r.review_score),2) as SCORE
from rest_info i
join rest_Review r on i.rest_id = r.rest_id
where i.address like '서울%'
group by i.rest_id, i.rest_name, i.food_type, i.favorites, i.address
order by SCORE desc, i.favorites desc;
MySQL/프로그래머스/3/299305. 대장균들의 자식의 수 구하기
select e1.ID, count(e2.id) as CHILD_COUNT
from ecoli_data e1
left join ecoli_data e2
on e1.id=e2.parent_id
group by e1.id
order by e1.id;
SELF JOIN 실행 시,
e1.id=e2.parent_ide2의 parent id를 e1이 id로 쓰도록 LEFT JOIN하는 것이 핵심이다.
MySQL/프로그래머스/4/131537. 오프라인/온라인 판매 데이터 통합하기
select Date_format(sales_date, '%Y-%m-%d') SALES_DATE,
PRODUCT_ID,
USER_ID,
SALES_AMOUNT
from online_sale
where sales_date between'2022-03-01' and '2022-03-31'
union all
select Date_format(sales_date, '%Y-%m-%d') SALES_DATE,
PRODUCT_ID,
NULL as USER_ID,
SALES_AMOUNT
from offline_sale
where sales_date between'2022-03-01' and '2022-03-31'
order by sales_date,
product_id,
user_id;
MySQL/프로그래머스/4/301650. 특정 세대의 대장균 찾기
SELECT e3.ID
FROM ecoli_data e1
JOIN ecoli_data e2 ON e1.ID = e2.PARENT_ID
JOIN ecoli_data e3 ON e2.ID = e3.PARENT_ID
WHERE e1.PARENT_ID IS NULL
ORDER BY e3.ID;
SELF JOIN 시 Foreign Key로 두고 있는 관계에 유의하여 코드를 작성한다.
e1.ID = e2.PARENT_ID e2.ID = e3.PARENT_ID
MySQL/프로그래머스/2/144854. 조건에 맞는 도서와 저자 리스트 출력하기
select
BOOK_ID,
AUTHOR_NAME,
DATE_FORMAT(published_date, '%Y-%m-%d') as PUBLISHED_DATE
from book b
left join author a on b.author_id=a.author_id
where category='경제'
order by PUBLISHED_DATE;
MySQL/프로그래머스/2/131533. 상품 별 오프라인 매출 구하기
select
PRODUCT_CODE,
(price*sum(sales_amount)) as SALES
from product p
join offline_sale o on p.product_id=o.product_id
group by o.product_id
order by 2 desc, 1;
MySQL/프로그래머스/3/59044. 오랜 기간 보호한 동물(1)
select
i.NAME,
i.DATETIME
from animal_ins i
left join animal_outs o on i.animal_id=o.animal_id
WHERE o.ANIMAL_ID IS NULL
order by 2
limit 3;
MySQL/프로그래머스/3/59043. 있었는데요 없었습니다
SELECT i.ANIMAL_ID, i.NAME
FROM ANIMAL_INS i
JOIN ANIMAL_OUTS o ON i.ANIMAL_ID = o.ANIMAL_ID
WHERE o.DATETIME < i.DATETIME
ORDER BY i.DATETIME;
SELECT o.ANIMAL_ID, o.NAME
FROM ANIMAL_OUTS o
LEFT JOIN ANIMAL_INS i ON o.ANIMAL_ID = i.ANIMAL_ID
WHERE i.ANIMAL_ID IS NULL
ORDER BY o.ANIMAL_ID;
수업시간에 배우지 않은 함수들도 활용하는 문제들도 있었고, 예상보다 시간이 오래 걸려 역시 높은 레벨 문제들은 난이도가 있음을 체감했다. 문제를 풀다보니 자연스럽게 복습도 되어 스터디의 의도대로 좋은 공부가 되었다.
모두 화이팅!