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


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


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 23538
Notice Python 무료 강좌 - 기초, 중급, 머신러닝(2023년 6월 업데이트) 코난(김대우) 2021.01.01 12426
1734 SQL Server Plan Guide 생성 및 사용 jevida(강성욱) 2016.09.14 1527
1733 SQL Server 그래픽 실행 계획 노드 정보 jevida(강성욱) 2016.09.14 1120
1732 프로파일러를 이용한 실행계획 캡처하기 jevida(강성욱) 2016.09.14 994
1731 SQL Server 그래픽 실행 계획 및 텍스트 실행 계획 jevida(강성욱) 2016.09.14 3254
1730 SQL Server에서 Trigger 활성 / 비활성 감시 jevida(강성욱) 2016.09.14 1665
1729 DDL Trigger를 이용한 데이터베이스 변경 사항 추적 jevida(강성욱) 2016.09.14 1426
1728 Trigger를 이용한 SQL Server 커넥션 풀링 확인 jevida(강성욱) 2016.09.14 1132
1727 SQL Server Trigger jevida(강성욱) 2016.09.14 989
1726 인덱스에 대한 SORT_IN_TEMPDB 옵션 jevida(강성욱) 2016.09.14 888
1725 인덱스 DDL 작업의 디스크 공간 요구 사항 jevida(강성욱) 2016.09.14 952
1724 XML nodes() 함수를 이용한 OPENXML 교체 jevida(강성욱) 2016.09.14 1101
1723 XQuery를 사용한 XML 데이터 업데이트 jevida(강성욱) 2016.09.14 1997
1722 BCP XML 파일 형식 jevida(강성욱) 2016.09.14 1304
1721 SQL Server로 데이터 가져오기 jevida(강성욱) 2016.09.14 1343
1720 SQL Server Stored Procedure 암호화 jevida(강성욱) 2016.09.14 2808
1719 SQL Server 대칭키 vs 비대칭키 암호화 jevida(강성욱) 2016.09.14 1767
1718 SQL Server 마스터 키 관리 jevida(강성욱) 2016.09.14 2053
1717 대칭키를 사용하여 SQL Server 암호화(열 수준) 하기 jevida(강성욱) 2016.09.13 5918
1716 DMV를 사용하여 누락된 인덱스 확인 jevida(강성욱) 2016.09.13 1413
1715 DMV를 이용한 SQL Server 대기 상태 확인 jevida(강성욱) 2016.09.13 4442





XE Login