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


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


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
Notice SQL강좌: 챗GPT와 함께 배우는 SQL Server 무료 강좌 목차와 소개 (2023년 9월 업데이트) 코난(김대우) 2023.08.18 38697
Notice Python 무료 강좌 - 기초, 중급, 머신러닝(2023년 6월 업데이트) 코난(김대우) 2021.01.01 20797
1614 SQL Server 성능 테스트 프로그램 minsouk 2015.01.17 6104
1613 extended events 를 이용한 wait 분석 minsouk 2014.07.25 6294
1612 동일기준에대해 복수컬럼 PIVOT 사용하기 열이 2014.06.27 23392
1611 SELECT / UPDATE / INSERT 쿼리를 쉽게 만들자... [1] Hisory 2014.05.12 10924
1610 ssms 자동 언어 변경이 되면, 이렇게 설정하세요 minsouk 2014.04.27 9613
1609 [QUERY] 그룹 번호 만들기 이스트럭(강동운) 2014.04.11 9045
» [QUERY]연승을 구해보자! [2] 이스트럭(강동운) 2014.04.11 9911
1607 VLF 이스트럭(강동운) 2014.04.11 8165
1606 extended events 용 excel view 공개 버전 minsouk 2014.04.07 6446
1605 [TIP] 한 라인에서 여러 테이블 삭제 하기. [3] 엘리엘1 2014.01.03 8662
1604 GhostRecord(인덱스에서 행 삭제시발생) jevida(강성욱) 2013.11.25 13612
1603 프로시저, 함수, 트리거 생성 정보 보기. jevida(강성욱) 2013.11.25 10675
1602 힙테이블에서 행을 삭제하면어떻게 처리 될까? [1] jevida(강성욱) 2013.11.25 9424
1601 SSMS의 디자이너에서 테이블 수정 시 발생하는 영향 [1] jevida(강성욱) 2013.11.25 10586
1600 SQL Server를 활용한 Perfmon 로그 저장 [1] jevida(강성욱) 2013.11.21 14880
1599 VLF 환경과 성능 jevida(강성욱) 2013.11.21 10153
1598 Block 모니터링 jevida(강성욱) 2013.11.21 8158
1597 추적파일을 테이블로 로드하기. jevida(강성욱) 2013.11.21 8937
1596 LOGON 트리거 jevida(강성욱) 2013.11.18 6608
1595 DeadLock(교착상태) 모니터 하기 [2] jevida(강성욱) 2013.11.18 11476





XE Login