select a.category,
a.price as 'MAX_PRICE',
a.product_name as 'PRODUCT_NAME'
from
(
select category,
price,
product_name,
rank() over (partition by category order by price desc) RANKKK
from food_product
where category in ('과자','국','김치','식용유')
) a
where rankkk=1
order by 2 desc
환경셋팅
오늘은 기존 노트북에서 사용하던 환경을 데스크탑으로 옮기는 작업을 실시하였다.
파이썬, 주피터노트북을 새로 설치하고 DBeaver 설치 및 스파르 DB연결, localhost 환경 셋팅을 수행하였다.
진로에 대한 고민
3시에 데이터분석가로서 준비해야할것들 및 앞으로 방향성에 대한 라이브세션을 수강하였는데
강의 수강 후 들었던 의문은 그럼 나는 지금 신인인가 경력인가에 대해 고민이 있었다.
2016년 부터 사회생활을 시작하여 환경경영, 내부감사, ESG경영, 자금세탁방지등 다양한 분야의 컨설턴트로 근무하였고
데이터분석가로서 업종 전환을 준비하고 있는데
데이터 분석가로서는 경험이 전무하다 보니 신입으로 하기에도, 그렇다고 다른 필드경험을 무시하기에도 정확한 판단기준이 서지 않았다.
그리고 JD를 살펴보며 보통 신입 혹은 3년이상의 경력직을 채용하는경우가 많았다.
튜터와 상담후 근무 했던 경험을 살려 고객, IT관련 데이터분석보다는 조직의 내부 의사결정에 도움을 주는 사업 관련 데이터분석가로 가면 근무 흐름등은 거의 유사하기 떄문에 유관경력을 인정 받을수도 있을것 같다
물론 이런 보고서 분석 작업을 최소화 하고 이써빌리티가 없는 보고서를 쓰기 위해 업종을 전환하는것이기 때문에 충분한 고민이 동반 되어야 겠다.
SQL
RANK() OVER (ORDER BY 컬럼명 DESC) RANK등수
오답
select FOOD_TYPE,
REST_NAME,
max(favorites) FAVORITES
from
(
select *,
RANK() OVER (ORDER BY favorites DESC) RANK등수
from rest_info
) a
group by food_type
order by food_type desc
→ 즐겨찾기가 가장 많은 가게를 rank() over 및 max() 로 가져 왔으나 이러한 경우 price의 max를 가져올순 있지만 그 행에 해당하는 가게 정보 및 그 밖의 정보를 가져 오지 않았다.
→그저 group by 했을 때 가장 위에 나오는 정보를 가져 올 뿐
튜터와의 상담
일단 나는 rank() over 함수를 사용해서 group by를 하면 제일 위에 값이 조회 된다고 '상상' 했으나 이는 실제로 어찌 구현되고 있는지 아무도 장담을 하지 못함
그렇기 떄문에 partition by 를 활용해 카테고리별 작동을 하도록 따로 명령을 내야함
그리고 SQL 문법 인지 순서를 생각하면 아래와 같이 고민 해야함
- SQL이 내부적으로 인지하고 작동하는 순서는 아래와 같아요.
- Select * from 테이블명;
- FROM → ON → JOIN → WHERE → GROUP BY → HAVING → SELECT → DISTINCT → ORDER BY
- 제일 처음에 RANK로 컬럼명을 주었더니 함수명이랑 겹쳐서 그런가 작동을 안함. 그래서 RANKKK로 바꿈
- 아래와같이 작동 시키면 from where 로 인지했는데 이때 컴퓨터는 RANKKK의 존재를 인지하지 못해 순서상 당연히 존재하지 않으니까
- 그러므로 서브쿼리로 돌려야함
select category,
price,
product_name,
rank() over (partition by category order by price desc) RANKKK
from food_product
where category in ('과자','국','김치','식용유')
and RANKKK=1
select a.category,
a.price as 'MAX_PRICE',
a.product_name as 'PRODUCT_NAME'
from
(
select category,
price,
product_name,
rank() over (partition by category order by price desc) RANKKK
from food_product
where category in ('과자','국','김치','식용유')
) a
where rankkk=1
order by 2 desc
찾아본 정답
select FOOD_TYPE,
REST_ID,
REST_NAME,
max(favorites) FAVORITES
from
(
select *,
RANK() OVER (ORDER BY favorites DESC) RANK등수
from rest_info
) a
group by food_type
order by food_type desc
→그래서 애초에 서브쿼리를 활용하여 가격이 가장 높은것 부터 다른 행의 정보가 같이 가져올 수 있게 하였고
→그 서브쿼리로 만든 DB내에서 정보를 조회하게 작성하였다.
'TIL' 카테고리의 다른 글
240709 TIL (join과 관련하여) (0) | 2024.07.10 |
---|---|
20240709 TIL (0) | 2024.07.09 |
240705 TIL (데이터분석 종합반) (0) | 2024.07.05 |
20240703 TIL (0) | 2024.07.03 |
240702 TIL (0) | 2024.07.02 |