[SolveSQL] 최고의 근무일을 찾아라, 지역별 주문의 특징
1. 최고의 근무일을 찾아라 - https://solvesql.com/problems/best-working-day/
solvesql
solvesql.com
Q. Waiter's Tips 데이터셋에는 식사 금액, 팁, 결제자 성별, 결제 요일 등 레스토랑 손님들의 계산 정보가 들어있습니다. 이 레스토랑에 근무하는 서버는 팁을 많이 받을 수 있는 날 하루를 골라 근무하고 싶습니다.
요일별로 팁 총액을 집계하고 팁이 가장 많았던 요일과 그날의 팁 총액을 출력하는 쿼리를 작성해주세요.
결과 데이터는 아래 컬럼을 포함해야 합니다.
- day - 요일
- tip_daily - 요일 별 팁 총액
A. Limit 조건제어문은 반환된 결과의 행 개수(출력 개수)를 제한하기 위한 문법이다. 여기서는 '하루만' 근무하고 싶다고 했으니 가장 팁을 많이 주는 하루만 답으로 나오게끔, limit 1을 추가했다.
Select ~~
From ~~
Order by ~~ Where ~~
Limit 3 #select문으로 반환된 결과의 출력 개수 제한 : 3개 열만 출력한다
Limit 10,3 : 10행부터 3개 행만 출력한다
Answer
select day, sum(tip) as tip_daily
from tips
group by day
order by tip_daily desc
limit 1
그러면 결과가 아래와 같이 나온다.
토요일만 근무하시면 됩니다 ~
2. 지역별 주문의 특징 - https://solvesql.com/problems/characteristics-of-orders/
solvesql
solvesql.com
Q. US E-Commerce Records 2020 데이터셋은 미국 이커머스 웹사이트의 판매 데이터 입니다. records 테이블은 주문 번호, 주문 날짜, 주문 지역, 카테고리 등 주문의 상세 정보를 담고 있습니다. 이 데이터를 이용하여 미국의 각 지역별로 어떤 카테고리의 상품이 많이 판매되는지 알아보려고 합니다. region, category 별 주문량을 계산해 출력하는 쿼리를 작성해주세요.
결과 데이터 형식
결과 데이터는 아래와 같은 테이블 형태로 출력되어야 하고, Region 컬럼 기준 오름차순으로 정렬되어 있어야 합니다.
결과 데이터의 각 컬럼은 다음과 같은 의미를 갖습니다.
- Region - 주문 지역
- Furniture - 해당 지역 내 가구(’Furniture’) 주문 수
- Office Supplies - 해당 지역 내 오피스 물품(’Office Supplies’) 주문 수
- Technology - 해당 지역 내 전자기기(’Technology’) 주문 수
칼럼이 많기에 정신을..똑띠 차려야 한다 :) 또한, case를 통해 조건을 추가하고, order_id의 중복값이 있기 때문에 이를 제거하는 구문을 추가해 줘야 한다.
SELECT Region,
SUM(case when category = 'Furniture' then orders end) 'Furniture',
SUM(case when category = 'Office Supplies' then orders end) 'Office Supplies',
SUM(case when category = 'Technology' then orders end) 'Technology'
FROM (SELECT region Region, category, COUNT(DISTINCT order_id) orders
FROM records
GROUP BY region, category) records1
GROUP BY region
ORDER BY region;
case when ~~ 해서 카테고리별 조건을 추가하는 것이 많이 번거로운 문항이었다...
그래도 무사 출력 완 :-)
주말 좀전부터 이런저런 일로 정신없어서 며칠 쉬었더니 SQL 감 훅 떨어진게 느껴진다....다시 아자아자...