Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Info

특정 Type에 해당하는 정보를 특정 그룹 id당 , 우측으로 보고싶은 Type만큼 늘려서 보여줘야 한다고 가정해봅시다.

이러한 발상은 집합과 요소를 혼동한것이고 SQL의 원리(집합론의 원리)를 위배하는것입니다.

테이블의 형태는 아래와같습니다.하지만 우리 전통적인 분석가들은 이러한 리포트를 엑셀에서 제어하기를 원합니다.

테이블의 형태는 아래와 같으며, 이것을 추출하는 법을 간단하게 정리하겠습니다.


실행버젼 : mysql 5.x

호텔별 업체 가격을 우측으로 늘림


해법

귀찮더라도 집약합수를 사용

Code Block
languagesql
themeEmacs
use jplist_node;

select p.gid,p.dtsday,p.dteday,p.region1,p.region2,p.name,
	   o.name as o_name ,
       p.price,
       min(o.price) as minprice, max(o.price) as maxprice,min(o.price)-p.price as diffprice, 
	   max(CASE WHEN o.sprovider='Agoda.com' THEN o.price ELSE NULL END ) AS 'Agoda.com',
       max(CASE WHEN o.sprovider='AgodaAmoma.com' THEN o.price ELSE NULL END ) AS 'Amoma.com',
       max(CASE WHEN o.sprovider='Agoda.comDaily' THEN o.price ELSE NULL END ) AS 'Daily',
       max(CASE WHEN o.sprovider='Expedia.co.kr' THEN o.price ELSE NULL END ) AS 'Expedia.co.kr',
       max(CASE WHEN o.sprovider='호텔에서 결제' THEN o.price ELSE NULL END ) AS '호텔에서 결제',
       max(CASE WHEN o.sprovider='호텔엔조이' THEN o.price ELSE NULL END ) AS '호텔엔조이',
       max(CASE WHEN o.sprovider='호텔조인' THEN o.price ELSE NULL END ) AS '호텔조인',
       max(CASE WHEN o.sprovider='호텔패스' THEN o.price ELSE NULL END ) AS '호텔패스',
       max(CASE WHEN o.sprovider='ExpediaHilton.co.krcom' THEN o.price ELSE NULL END ) AS 'Hilton.com',
       max(CASE WHEN o.sprovider='Expedia.co.krHotels.com' THEN o.price ELSE NULL END ) AS 'Hotels.com',
       max(CASE WHEN o.sprovider='Trip.com' THEN o.price ELSE NULL END ) AS 'Trip.com',
       max(CASE WHEN o.sprovider='야놀자' THEN o.price ELSE NULL END ) AS '야놀자'
	from hotellog p 
	inner join mapping m on m.lid = p.gid
    inner join hotellog o on o.gid = m.gid and o.mprovider = m.mprovider and o.dtsday = p.dtsday and o.dteday = p.dteday
    where p.mprovider = 'IntInter' and p.dtsday='20180115' and p.dteday='20180115'
    group by p.gid
    order by p.region1;