database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 40805 게시물 읽기
No. 40805
그룹 기준 횟수 카운트 문의 드립니다.
작성자
김미림
작성일
2015-05-22 09:44ⓒ
2015-05-22 09:52ⓜ
조회수
7,561
안녕하세요.
 
그룹 기준 횟수 카운트 문의 드립니다.
 
다음과 같은 데이타 구조가 있습니다.
 
v1 기준으로 v2 가 동일데이타를  묶어   
하나의 값으로 나타내야 하는데 생각보다 쉽지 않습니다.
 
속도까지 고려해야 해서 고수님들의 도움을 얻고자 이렇게 올려봅니다.
 
감사합니다.
 
 
 
 
 
with t as ( 
select 1 seq ,'A1' v1 ,1 v2 from dual union all
select 2,'A1',2 from dual union all
select 3,'A1',2 from dual union all
select 4,'A1',2 from dual union all
select 5,'A1',3 from dual union all
select 6,'A1',2 from dual union all
select 7,'A1',2 from dual union all
select 8,'A1',2 from dual union all
select 9,'A1',4 from dual union all
select 10,'A1',2 from dual union all
select 11,'A1',2 from dual union all
select 12,'A1',2 from dual union all
select 13,'A1',1 from dual union all
select 14,'B1',1 from dual union all
select 15,'B1',2 from dual union all
select 16,'B1',2 from dual union all
select 17,'B1',2 from dual union all
select 18,'B1',2 from dual union all
select 19,'B1',2 from dual union all
select 20,'B1',3 from dual union all
select 21,'B1',2 from dual union all
select 22,'B1',2 from dual union all
select 23,'B1',2 from dual union all
select 24,'B1',1 from dual union all
select 25,'B1',2 from dual union all
select 26,'B1',2 from dual union all
select 27,'B1',2 from dual union all
select 28,'B1',2 from dual union all
select 29,'B1',3 from dual
)
 
select * from t 
 
 
 
seq v1 v2
1 A1 1
2 A1 2
3 A1 2
4 A1 2
5 A1 3
6 A1 2
7 A1 2
8 A1 2
9 A1 4
10 A1 2
11 A1 2
12 A1 2
13 A1 1
14 B1 1
15 B1 2
16 B1 2
17 B1 2
18 B1 2
19 B1 2
20 B1 3
21 B1 2
22 B1 2
23 B1 2
24 B1 1
25 B1 2
26 B1 2
27 B1 2
28 B1 2
29 B1 3
 
결과값은 다음과 같습니다.
 
 
 
v1 v2 횟수 총횟수
A1 1 2 2
A1 2 3 9
A1 3 1 1
A1 4 1 1
B1 1 2 2
B1 2 3 12
B1 3 2 2

 

감사합니다.

 
 
 

 

이 글에 대한 댓글이 총 4건 있습니다.

select y.v1

     , y.v2

     , sum(flag) as sub_cnt

     , count(1)  as total_cnt

  from (select x.seq

             , x.v1

             , x.v2

             , case when v1 = prev_v1 and v2 = prev_v2 then 0

                    else 1

               end as flag

          from (select seq

                     , v1

                     , v2

                     , lag(v1, 1) over(order by seq) as prev_v1

                     , lag(v2, 1) over(order by seq) as prev_v2

                  from t

               ) x

       ) y

 group by y.v1

        , y.v2

 

 

팡(pangs)님이 2015-05-22 10:18에 작성한 댓글입니다.
이 댓글은 2015-05-22 10:27에 마지막으로 수정되었습니다.

답변 너무 감사합니다.

제가 분석함수라는 얘기를 그림이 너무 복잡할까봐  빼놓았네요 

다음과 같이 나와야 하는데 가급적 group by 를 않쓰고 

할려고 합니다. 

 

seq v1 v2 구간그룹출연횟수 총횟수
1 A1 1 2 2
2 A1 2 3 9
3 A1 2 3 9
4 A1 2 3 9
5 A1 3 1 1
6 A1 2 3 9
7 A1 2 3 9
8 A1 2 3 9
9 A1 4 1 1
10 A1 2 3 9
11 A1 2 3 9
12 A1 2 3 9
13 A1 1 2 2
14 B1 1 2 2
15 B1 2 3 12
16 B1 2 3 12
17 B1 2 3 12
18 B1 2 3 12
19 B1 2 3 12
20 B1 3 2 2
21 B1 2 3 12
22 B1 2 3 12
23 B1 2 3 12
24 B1 1 2 2
25 B1 2 3 12
26 B1 2 3 12
27 B1 2 3 12
28 B1 2 3 12
29 B1 3 2 2

 

 

감사합니다.

김미림님이 2015-05-22 10:54에 작성한 댓글입니다. Edit

-- 집계함수 구문인 "GROUP BY v1, v2" 대신
-- 분석함수 구문인 "OVER(PARTITION BY v1, v2)" 을 사용하시면 됩니다.
SELECT seq, v1, v2
     , COUNT(flag) OVER(PARTITION BY v1, v2) cnt1
     , COUNT(*)    OVER(PARTITION BY v1, v2) cnt2
  FROM (SELECT seq, v1, v2
             , CASE WHEN v1 = LAG(v1) OVER(ORDER BY seq)
                     AND v2 = LAG(v2) OVER(ORDER BY seq)
               THEN null ELSE 1 END AS flag
          FROM t
        )
 ORDER BY seq
;

마농(manon94)님이 2015-05-22 11:21에 작성한 댓글입니다.

답변 주신분들 너무 감사드립니다.

 

즐겁고 행복한 주말 되세요

 

김미림님이 2015-05-22 12:35에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
40808퀴즈입니다. 공집합을 제외한 모든 멱집합의 원소를 출력하는 SQL [4]
김흥수
2015-05-27
8548
40807모든 테이블에 하나라도 없는 값은 테이블명 출력? [1]
궁금이
2015-05-27
7152
40806사용자로그 관리에 대해 여쭤봅니다. [2]
예진예랑
2015-05-26
6906
40805그룹 기준 횟수 카운트 문의 드립니다. [4]
김미림
2015-05-22
7561
40804시작점, 끝점 좌표를 가지고 연결관계 파악하기 [3]
슈렉
2015-05-21
8097
40803데이터 조합 출력 쿼리 부탁드립니다. [1]
황성균
2015-05-19
7700
40800오라클 쿼리 질문있습니다. [1]
박재형
2015-05-13
7258
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.020초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다