컬럼 값 3가지 이상 가지고 있는 회원 조회 방법 0 9 549

by 안뿌꾸 [SQL Query] [2019.07.11 22:51:08]


select 

          lc.cust_no 고객번호
         ,ms.acco_no 계좌번호
         ,ms.bal_loan 잔액
         ,lc.amt_io_in 이자
         ,lc.amt_io_un 연체료
         
from a_savems ms, l_loancalc lc
where ms.cust_no = lc.cust_no

and not ms.aclg_ty in('GJ')
and lc.proc_date = '20190331'
and ms.basic_date = '20190331'

////////////////////////////////////////////////////////////////

결과처럼 띄우려 쿼리 짜고 있었습니다.

조건은 대출상품종류(가지급금 제외) 를 3건 이상 가지고 있는 고객에 대해 조회를 하는것인데

기준 키 값은 date 20190331 을 잡는것이며

aclg_ty가 대출상품 컬럼이라 가지급금 'GJ' 를 제외시켰는으며, 

(이외에도 aclg_ty에는 DF , DD , EP 등 5개가 더 있음)

한계좌에 3건 이상의 상품이 조회되면 중복계좌가 출력되는 것은 distinct 쓰면 될 꺼라 생각하고

나머지는 대출상품종류 3건 이상 가지고 있는 고객에 막혔습니다.

어떤 쿼리문을 써야 3건 이상 가지고 있는 고객을 조회 할 수 있을까여

 

<결과>

고객번호 계좌번호 잔액 이자 연체료
1000063618
308-02-13-0263881
99,123,400 1,411,789 921,845
1000063618
308-02-44-0004529
300,000 0 0
1000063618
308-02-44-0007719
150,741 0 0
1000063618
308-02-44-0069690
74,123,400 0 0
1000063618
543-02-28-0074019
5,000,000 541,202

0

by 마농 [2019.07.12 08:07:35]
SELECT *
  FROM (SELECT lc.cust_no   고객번호
             , ms.acco_no   계좌번호
             , ms.bal_loan  잔액
             , lc.amt_io_in 이자
             , lc.amt_io_un 연체료
             , COUNT(DISTINCT ms.aclg_ty) OVER(PARTITION BY lc.cust_no) cnt
          FROM a_savems   ms
             , l_loancalc lc
         WHERE ms.cust_no    = lc.cust_no
           AND ms.aclg_ty   != 'GJ'
           AND lc.proc_date  = '20190331'
           AND ms.basic_date = '20190331'
        ) a
 WHERE cnt >= 3
;

 


by 마농 [2019.07.12 08:15:53]

조인조건이 이상합니다.
고객번호만으로 조인한 것 맞나요?
계좌번호 조인이 누락된 건 아닌지?


by 안뿌꾸 [2019.07.12 08:54:25]

계좌번호는 savems에만 존재하여 고객번호만으로 조인을 하였습니당.


by 마농 [2019.07.12 09:33:43]

각 테이블의 키가 어떻게 되나요?
고객번호만으로 조인하면 다대다 조인이 되어 카티션곱(중복) 현상이 발생될 텐데요?


by 안뿌꾸 [2019.07.12 11:20:00]

넹 중복현상이 발생되었네욤 .. savems는 aclg_no과 basic_date로 loancalc는 aclg_no , proc_date 네요


by 마농 [2019.07.12 11:21:23]

그러면 aclg_no 로 조인조건이 있어야 할 듯 한데요?


by 안뿌꾸 [2019.07.12 13:05:21]

넹 aclg_no로 조인을 하니깐 값이 아무것도 출력이 안돼서, 쿼리문을 바꾸었습니다. 대출상품 타입은 acly_ty가 아닌 id_loan 이어서 이거를 바꾸고

대출삼풍 종류(가지급 , ## 제외)를 3건 이상 가지고 있는 고객에 대한 조건을 서브쿼리로 작성하였습니다.

group by를 하여 그 고객번호(cust_no)가 가지고 있는 상품(id_loan)을 묶고 한번더 서브 쿼리로 고객번호(cust_no)를 묶어서 조건을 달아 대출상품 3건이상 가지고 있는 고객의 대한 조건쿼리를 작성하여

컬럼값을 뽑아내려 하는데 where in 절에는 count가 안들어가야 쿼리문이 실행이 되더라구요 이 부분을 어찌 수정을 해야 하나요?

aclg_no으로 조인을 하였습니당  

SELECT lc.cust_no 고객번호
			 ,ms.acco_no 계좌번호
			 ,ms.bal_loan 잔액
			 ,lc.am_loan_int 이자
			 ,lc.am_loan_i_dly 연체료

FROM a_savems ms, l_loancalc lc
WHERE lc.cust_no IN (

		 (SELECT cust_no
			,count(*)
			FROM
			 	(SELECT cust_no
			 	       ,id_loan
       					,count(*)
				FROM a_savems
				WHERE
				NOT id_loan IN ('GJ','##')
				AND basic_date = '20190331'
				GROUP BY cust_no, id_loan
      						)
			GROUP BY cust_no
			HAVING count(*) > 2
			)
)
and ms.aclg_no = lc.aclg_no
and ms.basic_date = '20190331'
and ms.basic_date = lc.proc_date
;

 


by 마농 [2019.07.12 13:45:44]

그냥 이것 저것 막 조인해 보고,
중복 발생한다고 Distinct 붙여 보고. 그러는거 아닙니다.
두 테이블의 관계를 정확하게 알고 조인을 해야 합니다.
각 테이블에 대한 설명을 해주세요.
각 테이블의 중요 컬럼들에 대한 설명을 해주세요.
각 테이블의 관계에 대해 설명을 해주세요.
원하는 결과에 대해 설명을 해주세요.
샘플자료를 이용해 설명을 해주세요.


by 안뿌꾸 [2019.07.12 14:21:54]

듣고보니 뼈저리게 느끼게 됩니다. 확실히 이것저것 조인해보고 중복발생해서 distinct 붙이고 이해하기도 전에 값만 이리저리 붙이는 꼴이 되었네요, 아무래도 구문 작성하기전 부터

기초부터 다시 해야할 것 같습니다. ㅜㅜ 결과 값은 결국 교수님한테 물어봐서 해결은 했지만 , 어거지로 이해한격이라 제가 쓰는 구문부터 이해해야 할 것 같습니다.

도와주셔서 감사합니다.

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