데이터 집계 방법 0 5 1,497

by OYS [SQLServer] [2024.11.25 15:44:27]


안녕하세요. 구루비에서 많이 배우고 있습니다.

답변주신분들께 진심으로 감사드립니다.

 

order_no id dist_1 goods_1
1000 AA 회원 가방1
1000 AA 회원 휴대폰
1000 AA 회원 책상
2000 BB 비회원 책상
3000 CC 회원 가방1
3000 CC 회원 가방4
4000 DD 비회원 가방2
4000 DD 비회원 가방5
4000 DD 비회원 가방6
4000 DD 비회원 휴대폰
5000 EE 회원 가방3

저는 이 상태에서 '가방'을 보유하고 있는 고객의 현황을 알고 싶은데 어떻게 쿼리를 작성해야 할런지...(어떤 가방을 보유하고 있는지는 중요하지 않습니다.)

즉 

가방 1개 보유고객 : 2명 (AA, EE)

가방 2개 보유고객 : 1명 (CC)

가방 3개 보유고객 : 1명 (DD)

--> 가방 1개 보유고객 : 2명 (AA, EE)의 경우 설명을 돕기 위해 AA, EE 를 명시했을 뿐  실제 결과는 

가방 1개 보유고객 : 2명 

가방 2개 보유고객 : 1명 

가방 3개 보유고객 : 1명

이런식으로 표현되면 될 것 같습니다. 

 

by 마농 [2024.11.26 01:15:33]
WITH t AS
(
SELECT 1000 order_no, 'AA' id, '회원' dist_1, '가방1' goods_1
UNION ALL SELECT 1000, 'AA', '회원'  , '휴대폰'
UNION ALL SELECT 1000, 'AA', '회원'  , '책상'
UNION ALL SELECT 2000, 'BB', '비회원', '책상'
UNION ALL SELECT 3000, 'CC', '회원'  , '가방1'
UNION ALL SELECT 3000, 'CC', '회원'  , '가방4'
UNION ALL SELECT 4000, 'DD', '비회원', '가방2'
UNION ALL SELECT 4000, 'DD', '비회원', '가방5'
UNION ALL SELECT 4000, 'DD', '비회원', '가방6'
UNION ALL SELECT 4000, 'DD', '비회원', '휴대폰'
UNION ALL SELECT 5000, 'EE', '회원'  , '가방3'
)
SELECT cnt_goods
     , COUNT(*) cnt_id
  FROM (SELECT COUNT(*) cnt_goods
          FROM t
         WHERE goods_1 LIKE '가방%'
         GROUP BY id
        ) a
 GROUP BY cnt_goods
;

 


by OYS [2024.11.27 10:06:50]

늦은 새벽시간에 이렇게 친절하게 답변주셔서 감사드립니다.

역시 서브쿼리를 잘 작성해야 하는군요..

우매한 질문이지만 서브쿼리 관련된 서적 좀 추천해주실 수 있으신지... ^^

 


by OYS [2024.11.27 10:08:06]

작성해주신 쿼리가 한 번에 이해가 가질 않아, 2개로 나눠봤습니다. 


SELECT COUNT(*) cnt_goods
          FROM t
         WHERE goods_1 LIKE '가방%'
         GROUP BY id

--> 이 구문은 goods안에 몇 개의 가방이 있는지를 id별로 구해라라는 의미인것 같고

   결과는 1, 2, 3, 1이 나와서 여기까지는 이해를 했습니다. 

   (즉 AA는 1개, CC는 2개, DD는 3개, EE는 1개     ※ BB는 goods안에 가방이 없는관계로 제외)


by OYS [2024.11.27 10:09:41]

문제는 그 다음인데 

위에서 도출된 결과가 FROM 절 안에 들어가서 서브쿼리 형태로 만들어졌는데

이 구문을 어떻게 해석을 해야할 지 잘 모르겠습니다. 

 

 많이 바쁘실텐데 번거롭게 해드려서 정말 죄송합니다. 

 


by 마농 [2024.11.27 10:14:07]

1차 집계 결과를 가지고 다시 2차 집계 합니다.
- 1차 : ID 별 (가방 건수)
- 2차 : (가방 건수)별 건수

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