안녕하세요. 구루비에서 많이 배우고 있습니다.
답변주신분들께 진심으로 감사드립니다.
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명
이런식으로 표현되면 될 것 같습니다.
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 ;