now is better than never

[Oracle] 공공데이터 서울 상가(상권)정보 분석하기 1 - PIVOT 본문

SQL/프로젝트

[Oracle] 공공데이터 서울 상가(상권)정보 분석하기 1 - PIVOT

김초송 2022. 12. 1. 17:23
select 시군구명
    , count(case when 상권업종대분류명 = '소매' then 1 end) 소매
    , count(case when 상권업종대분류명 = '음식' then 1 end) 음식
    , count(case when 상권업종대분류명 = '부동산' then 1 end) 부동산
    , count(case when 상권업종대분류명 = '생활서비스' then 1 end) 생활서비스
    , count(case when 상권업종대분류명 = '관광/여가/오락' then 1 end) "관광/여가/오락"
    , count(case when 상권업종대분류명 = '학문/교육' then 1 end) "학문/교육"
    , count(case when 상권업종대분류명 = '숙박' then 1 end) 숙박
    , count(case when 상권업종대분류명 = '스포츠' then 1 end) 스포츠
from market_2022
group by 시군구명
order by 시군구명;

출처: 데이터리안 수업 들으면서 배웠던 pivot 테이블 만드는 방법

물론  case when 대신 if함수 가능 (오라클은 DECODE인 듯)

case when 구문 대신 DECODE(상권업종대분류명='소매', 1, null)

을 쓰면 된다

 

아마 mySQL에는 PIVOT 함수가 없어서 이렇게 만드는 수 밖에 없었던 것 같다

select *
from (
    select 시군구명, 상권업종대분류명
    from market_2022
)
PIVOT ( count(*) for 상권업종대분류명 IN ('소매', '음식', '부동산', '생활서비스'
                                        , '관광/여가/오락', '학문/교육', '숙박', '스포츠'))
order by 시군구명;

SELECT *

FROM ( SELECT 행, 열 FROM 테이블)

PIVOT ( 집계함수 FOR 열 IN (컬럼명들))

 

group by를 안 써도 되는게 오히려 지금은 좀 헷갈린다...!

 

둘 다 같은 결과 출력

역시 먹보의 나라

 

오라클은 쓰면 쓸수록 헷갈림 ㅠ

그리고 SQL은 PIVOT테이블 만들 때 컬럼명을 다 써야된다는게 정말 너무너무 번거롭다,,,,! 중분류 소분류는 어떻게 하라고ㅜㅜ 파이썬이 짱이네

 

출처: 공공데이터 포털 소상공인시장진흥공단_상가(상권)정보