select r.*, om.menu_name from order_review r
inner join order_menu om on r.order_menu_id = om.id
where is_deleted = null;
❌ is_deleted = null
✅ is_deleted = 0
정답
select r.*, om.menu_name from order_review r inner join order_menu om on r.order_menu_id = om.id where is_deleted = 0;
select o.orderer_name, om.menu_name, om.price, om.count from `order` o
inner join order_menu om on o.id = om.order_id;
✅
order를 ``로 감싼 이유는 예약어이기 때문에 datagrip이 헷갈리지 않도록 쓴 것.
datagrip : jetbrains의 프로그램
<order 기준>
select o.orderer_name, om.menu_name from `order` o
left join order_menu om on o.id = om.order_id
left join order_review r on om.id = r.order_menu_id
where r.id = null;
<order_menu 기준>
select o.orderer_name, om.menu_name from order_menu om
left join `order` o on om.order_id = o.id
left join order_review r on om.id = r.order_menu_id
❌ where r.id = null;
✅ where r.id is null;
SELECT seller.id, count(*) as 매장개수 FROM seller
inner join store s on seller.id = s.seller_id
group by seller.id;
select seller_id, count(*) from store
group by seller_id;
select se.id, se.owner_name, count(s.id) as 매장개수 from store s
inner join seller se on s.seller_id = se.id
group by se.id
order by 매장개수;
✅
select avg(score) from order_review
where is_deleted is false;
select avg(score) from order_review
where is_deleted=0;
select name, email, count(*) as 주문개수 from customer c
inner join `order` o on c.id = o.customer_id
group by c.id
order by 주문개수 desc;
✅
select owner_name from seller se
inner join store s on se.id = s.seller_id
group by se.id
order by count(*)
having count(*) > 3;
❌order by는 필요 없다.
select owner_name, count(s.id) as 매장개수 from seller se
inner join store s on se.id = s.seller_id
group by se.id
having 매장개수> 3;
주문이 아니라 주문개수의 총합
select menu_name, sum(count) as 판매개수 from order_menu
group by menu_id
order by 판매개수 desc;
❌ order_menu를 기준으로 하면 팔린 메뉴들의 판매개수만 조회된다.
한번도 안팔린 메뉴(주문이 없는 메뉴)들은 조회되지 않는다.
select m.name, sum(om.count) as 판매개수 from menu m
left join order_menu om on m.id = om.menu_id
group by m.id
order by 판매개수 desc;
전체 주문의 가격의 합
select (a.전체가격/ a.주문개수)
from (select count(*) as 주문개수 , sum(price*count) as 전체가격 from order_menu) as a
❌ order_menu 테이블에는 order_id가 겹치는 것도 있다. 그러므로 그것들은 1개의 주문으로 봐야한다. 그러니 order_id로 그룹화해야 한다.
주문 별로 그룹화됐기 때문에 avg를 사용하면 평균을 구할 수 있다.
정답
select avg(table1.전체가격) from (select sum(price*count) as 전체가격 from order_menu group by order_id) as table1
8. 결제 금액이 가장 많은 주문 고객의 이름을 조회
```sql
이런 유용한 정보를 나눠주셔서 감사합니다.