통계할 때 쿼리 질문있습니다(postgresql ( 7

by 어떠닝히 [2023.07.18 10:35:00]


현재 데이터를 아래와 같이 뽑아오고 있습니다.

settlement_uid associate_company_name client_name supply_price_free supply_price_free
FDM-17E34800-CA57-4EEB-AA2B-75E68C6E81A8 제휴사1 고객사 20000 <null>
FDM-3E8BA1C3-0394-4527-A53A-137DBA256A17 제휴사1 고객사 20000 <null>
FDM-6CBBDB7D-BF7B-49B2-A5C7-FEED750BED4D 제휴사2 고객사 590000 <null>
FDM-9125B7EF-C015-4F53-B1A7-2F80413A2128 제휴사3 고객사 30000 <null>
FDM-ADB31DDA-9543-46B3-8D62-A30488C5E973 제휴사1 고객사 20000 <null>
FDM-C10AA308-3E17-4D99-8780-871C7AF51221 제휴사2 고객사 590000 <null>

아래는 쿼리데이터입니다.

select                
    client_name                
,   associate_company_name                
,   sum(supply_price_free) as supply_price_free                
,   sum(supply_price_tax) as supply_price_tax                
from (                
SELECT tfsm.settlement_uid                
           , tfac.associate_company_name                
           , tfcm.client_name                
           , SUM(CASE                
                     WHEN tfsm.type_of_taxation = 'Free'                
                         THEN (tfim.supply_price * tfsm.order_count) END)                                 AS supply_price_free                
           , SUM(CASE                
                     WHEN tfsm.type_of_taxation = 'Tax'                
                         THEN (tfim.supply_price * tfsm.order_count) END)                                 AS supply_price_tax                
            , tfsm.type_of_taxation                
      from t_fdm_settlement_m tfsm                
               left outer join t_fdm_order_m tfom                
                               on tfsm.order_m_uid = tfom.order_m_uid                
               left outer join t_fdm_client_p tfcp                
                               on tfom.client_p_uid = tfcp.client_p_uid                
               left outer join t_fdm_item_m tfim                
                               on tfcp.item_m_uid = tfim.item_m_uid                
               left outer join t_fdm_associate_company tfac                
                               on tfcp.associate_company_uid = tfac.associate_company_uid                
               left outer join t_fdm_client_m tfcm                
                               on tfcp.client_m_uid = tfcm.client_m_uid                
      GROUP BY tfsm.settlement_uid                
             , tfac.associate_company_name                
             , tfcm.client_name                
            , tfsm.type_of_taxation                
      ORDER BY tfsm.settlement_uid                
) a                
group by                
    associate_company_name,                
    client_name,                
         supply_price_free,                
    supply_price_tax                

 

위 쿼리 결과로 합계를 구한 데이터입니다.
 

client_name associate_company_name supply_price_free supply_price_free
고객사 제휴사1 60000 <null>
고객사 제휴사2 30000 <null>
고객사 제휴사3 1180000 <null>

 

하고자하는 데이터      
client_name 제휴사1 제휴사2 제휴사3
고객사 60000 30000 1180000

이렇게 데이터가 가는ㅇ할까요?

pivot돌리면 될거같은데 복잡하게 짜본적이 없어서

도움을 요청드립니다.

감사해요.

 

 

 

 

 

 

by 마농 [2023.07.18 11:08:43]

supply_price_free 가 두번 나오는데? 하나는 supply_price_tax 인거겠죠?
항목이 두개(free, tax)인데? 원하는 결과는 하나(free)만 필요한 건가요?
하나만 필요한게 맞는지? 둘다 필요한데 잘못 표현한 것인지? 아니면 두 값의 합계가 필요한 것인지?


by 마농 [2023.07.18 11:29:49]

단서조항이 붙었네요? 널이라서 빼도 된다? 그럼 널이 아니면 빼면 안된다는 건가요?
질문이 명확해야 합니다. 그냥 "하나만 필요하다"라고 명확하게 이야기 해주셔야 합니다.
아니면 둘다 필요하긴 한데 널이라서 안나온 것이다.?
만약 둘 다 필요한 것이면? 두줄로 나와야 하는 것인지?


by 어떠닝히 [2023.07.18 11:13:47]

넵 맞습니다. supply_price_tax가 맞아요

저렇게 표현이 가능한가요..?pivot을 많이 안해봐가주고..

도움좀 부탁드려요.


by 마농 [2023.07.18 11:18:28]

결과표가 맞는지 의문이 들어서 질문했습니다.
제가 원하는 답은 "저렇게 표현이 가능한가요." 가 아닙니다.
결과표가 맞는지? 틀린지?
왜 그런 결과표가 나왔는지에 대한 설명이 필요합니다.
항목은 두개인데 하나만 표현한 이유?


by 어떠닝히 [2023.07.18 11:24:04]

아 그렇군요

client_name associate_company_name supply_price_free
고객사 제휴사1 60000
고객사 제휴사2 30000
고객사 제휴사3 1180000

위 데이터가 맞는거라고 보시면 됩니다.

결과값이 supply_price_tax는 null이라 빼도 되구요!

그래서 결과가

client_name 제휴사1 제휴사2 제휴사3
고객사 60000 30000 1180000

 

위 데이터 처럼 됩니다!

 


by 어떠닝히 [2023.07.18 11:56:44]

supply_price_free하나만 필요합니다


by 마농 [2023.07.18 12:28:34]

가변값인 자료를 대상으로 피벗 하는 것은 정적쿼리로는 불가능 하고 동적쿼리를 이용해야 합니다.
다음은 3개 고정 값으로 알고 있을 때의 정적 쿼리 예시입니다.
동적 쿼리 구현은 제휴사 부분만 별도 쿼리로 가져온 뒤 동적으로 쿼리를 완성하시면 됩니다.
 

SELECT client_name
     , SUM(CASE nm WHEN '제휴사1' THEN v END) "제휴사1"
     , SUM(CASE nm WHEN '제휴사2' THEN v END) "제휴사2"
     , SUM(CASE nm WHEN '제휴사3' THEN v END) "제휴사3"
  FROM (SELECT tfcm.client_name
             , tfac.associate_company_name          nm
             , tfim.supply_price * tfsm.order_count v
          FROM t_fdm_settlement_m tfsm
          LEFT OUTER JOIN t_fdm_order_m           tfom ON tfsm.order_m_uid           = tfom.order_m_uid
          LEFT OUTER JOIN t_fdm_client_p          tfcp ON tfom.client_p_uid          = tfcp.client_p_uid
          LEFT OUTER JOIN t_fdm_item_m            tfim ON tfcp.item_m_uid            = tfim.item_m_uid
          LEFT OUTER JOIN t_fdm_associate_company tfac ON tfcp.associate_company_uid = tfac.associate_company_uid
          LEFT OUTER JOIN t_fdm_client_m          tfcm ON tfcp.client_m_uid          = tfcm.client_m_uid
         WHERE tfsm.type_of_taxation = 'Free'
        ) a
 GROUP BY client_name
;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입