데이터베이스 개발자 Tip & 강좌

SQLER의 개발자들이 만들어가는 데이터베이스 사용자 Tip & 강좌 게시판입니다. SQL서버, Oracle, MySQL 등 여러 클라우드/오픈소스 기반 데이터베이스 개발 및 운영 관련 팁과 쿼리 노하우를 이곳에서 가장 먼저 접하실 수 있습니다. 많은 도움 되시길 바랍니다.

안녕하세요. 이스트럭(강동운)입니다.


연승쿼리 관련해서 정리해서 올려드립니다~!


Result: 1(승리), 0(패배)


결과.jpg



WITH GameResult AS

(

       SELECT 1 AS GameIDX, 1 AS UserIDX, 1 AS Result UNION ALL

       SELECT 1 AS GameIDX, 2 AS UserIDX, 0 AS Result UNION ALL

       SELECT 2 AS GameIDX, 1 AS UserIDX, 1 AS Result UNION ALL

       SELECT 2 AS GameIDX, 3 AS UserIDX, 0 AS Result UNION ALL

       SELECT 3 AS GameIDX, 3 AS UserIDX, 1 AS Result UNION ALL

       SELECT 3 AS GameIDX, 2 AS UserIDX, 0 AS Result UNION ALL

       SELECT 4 AS GameIDX, 1 AS UserIDX, 0 AS Result UNION ALL

       SELECT 4 AS GameIDX, 3 AS UserIDX, 1 AS Result UNION ALL

       SELECT 5 AS GameIDX, 1 AS UserIDX, 1 AS Result UNION ALL

       SELECT 5 AS GameIDX, 2 AS UserIDX, 0 AS Result UNION ALL

       SELECT 6 AS GameIDX, 1 AS UserIDX, 0 AS Result UNION ALL

       SELECT 6 AS GameIDX, 3 AS UserIDX, 1 AS Result UNION ALL

       SELECT 7 AS GameIDX, 2 AS UserIDX, 1 AS Result UNION ALL

       SELECT 7 AS GameIDX, 3 AS UserIDX, 0 AS Result

      

       UNION ALL SELECT 7 AS GameIDX, 1 AS UserIDX, 1 AS Result

       UNION ALL SELECT 8 AS GameIDX, 1 AS UserIDX, 1 AS Result

       UNION ALL SELECT 9 AS GameIDX, 1 AS UserIDX, 1 AS Result

       UNION ALL SELECT 10 AS GameIDX, 1 AS UserIDX, 1 AS Result

       UNION ALL SELECT 11 AS GameIDX, 1 AS UserIDX, 1 AS Result

)

SELECT

       UserIDX

,      MAX(TotalCount)

FROM

(

       SELECT

             UserIDX

       ,      COUNT(*) AS TotalCount

       FROM

       (

             SELECT

                    ROW_NUMBER() OVER(PARTITION BY UserIDX ORDER BY UserIDX, ROWNUM) - ROWNUM AS GROUPKEY

             ,      ROWNUM

             ,      UserIDX

             ,      GameIDX

             FROM

             (

                    SELECT

                           ROW_NUMBER() OVER(PARTITION BY UserIDX ORDER BY GameIDX) AS ROWNUM

                    ,      UserIDX

                    ,      GameIDX

                    ,      Result

                    FROM GameResult

             ) AAA

             WHERE Result = 1

       ) BBB

       GROUP BY UserIDX, GROUPKEY

) CCC

GROUP BY UserIDX




쿼리를 간단히 설명 드리면.. GameResult 라는 테이블에 ROW_NUMBER를 붙여서.. AAA 인라인 뷰를 생성하게 됩니다.

그럼 아래와 같은 테이블이 됩니다.


1.png


그 값을 토대로.. Result=1(승리인 것)만 필터링을 구하고 ..거기에 다시 ROWNUM(ROWNUM_NEW) 을 구하면 아래와 같은 테이블이 됩니다.


2.png


여기서 신기한 것은.. ROWNUM_NEW - ROWNUM을 하면.. 연승인 녀석들은 같은 그룹으로 묶이게 됩니다.


연속이 된다는 말은.. 처음 구한 rownum과 두번째 구한 rownum을 빼도 같은 값이 나오기 때문입니다. ^^


3.png


이 다음부터는.............. 설명드리지 않겠습니다~ㅋㅋ


연구좀 하면서 재미있었네요~~ 연구의 핵심은.. 연승인 놈들을 그룹을 지을 방법에 대해서 연구해봤네요~!


분명 방법이 있을 것 같은데...라고 ^^;


Deep Inside T-SQL 에 선분처리(507페이지 연결된 좌석번호 찾는 쿼리를 응용)를 참고해서 보다가 알게되었네요 ㅋㅋㅋ..


감사합니다.


혹시 더 좋은 쿼리 있으면 공유해주세요 ^^
No. Subject Author Date Views
1613 extended events 를 이용한 wait 분석 minsouk 2014.07.25 6264
1612 동일기준에대해 복수컬럼 PIVOT 사용하기 열이 2014.06.27 21372
1611 SELECT / UPDATE / INSERT 쿼리를 쉽게 만들자... [1] Hisory 2014.05.12 10870
1610 ssms 자동 언어 변경이 되면, 이렇게 설정하세요 minsouk 2014.04.27 9566
1609 [QUERY] 그룹 번호 만들기 이스트럭(강동운) 2014.04.11 8688
» [QUERY]연승을 구해보자! [2] 이스트럭(강동운) 2014.04.11 9485
1607 VLF 이스트럭(강동운) 2014.04.11 8078
1606 extended events 용 excel view 공개 버전 minsouk 2014.04.07 6400
1605 [TIP] 한 라인에서 여러 테이블 삭제 하기. [3] 엘리엘1 2014.01.03 8616
1604 GhostRecord(인덱스에서 행 삭제시발생) jevida(강성욱) 2013.11.25 13561
1603 프로시저, 함수, 트리거 생성 정보 보기. jevida(강성욱) 2013.11.25 10632
1602 힙테이블에서 행을 삭제하면어떻게 처리 될까? [1] jevida(강성욱) 2013.11.25 9379
1601 SSMS의 디자이너에서 테이블 수정 시 발생하는 영향 [1] jevida(강성욱) 2013.11.25 10526
1600 SQL Server를 활용한 Perfmon 로그 저장 [1] jevida(강성욱) 2013.11.21 14751
1599 VLF 환경과 성능 jevida(강성욱) 2013.11.21 10063
1598 Block 모니터링 jevida(강성욱) 2013.11.21 8074
1597 추적파일을 테이블로 로드하기. jevida(강성욱) 2013.11.21 8895
1596 LOGON 트리거 jevida(강성욱) 2013.11.18 6562
1595 DeadLock(교착상태) 모니터 하기 [2] jevida(강성욱) 2013.11.18 11356
1594 Tempdb 경합(동시성 강화) jevida(강성욱) 2013.11.18 7566





XE Login