1. 아래와 같은 요건을 SQL 쿼리로 작성하시오. ( 각 선수별로 가능한 포메이션을 기준으로 ROW_NUM 세팅 )


 ROW_ID

NAME

FORMATION

 ROW_NUM

 1

ERIKSEN

 LWF

 1

 2

ERIKSEN

 RWF

 2

 3

ERIKSEN

CAM

 3

 4

ERIKSEN

CM

 4

 5

KANE

CF

 1

 6

SON

CF

 1

 7

SON

LWF

 2

 8

SON

RWF

 3

 9

SON

CAM

 4

 10

VERTONGHEN

CB

 1

 11

VERTONGHEN

LB

 2



SQL : 


SELECT 
   ROW_ID
  ,NAME
  ,FORMATION
  ,ROW_NUMBER() OVER( PARTITION BY NAME ORDER BY ROW_ID ) AS ROW_NUM
FROM
  TOT_PLAYER
ORDER BY ROW_ID

해설 : 선수이름을 그룹으로 묶어서 ROW_NUMBER() 계산한다.

키워드 : ROW_NUMBER / PARTITION BY



2. 아래와 같은 요건을 SQL 쿼리로 작성하시오. ( 득점순위 ROW_NUM 세팅 )
    * 동일한 골 기록일 경우 같은 순위 랭크, 그 다음 순위는 RANK에 공백 순위가 발생하지 않음


 ROW_ID

NAME

GOAL

 ROW_NUM

 1

KANE

15

 1

 2

SON

15

 1

 3

ERIKSEN

6

 2

 4

ALLI

4

 3

 5

LAMELA

4

 3

 6

MOURA

4

 3

 7

VERTONGHEN

3

 4

 8

ALDERWEIRELD

2

 4



SQL : 


SELECT
   ROW_ID
  ,NAME
  ,FORMATION
  ,DENSE_RANK() OVER( ORDER BY GOAL DESC) AS ROW_NUM
FROM
TOT_PLAYER
ORDER BY ROW_ID

해설 : 득점순위를 찾는다. -> RANK 또는 DENSE_RANK 함수 사용

   동일한 득점이 있을 경우 그 다음 순위에 공백이 생기지 않는다 -> DENSE_RANK 함수 사용

키워드 : DENSE_RANK


3. 아래와 같은 요건을 SQL 쿼리로 작성하시오. ( 득점 순위 ROW_NUM 세팅 )
    * 동일한 골 기록일 경우 같은 순위 랭크, 그 다음 순위는 RANK에 공백 순위 발생


 ROW_ID

NAME

GOAL

 ROW_NUM

 1

KANE

15

 1

 2

SON

15

 1

 3

ERIKSEN

6

 3

 4

ALLI

4

 4

 5

LAMELA

4

 4

 6

MOURA

4

 4

 7

VERTONGHEN

3

 7

 8

ALDERWEIRELD

2

 7


SQL : 


SELECT
   ROW_ID
  ,NAME
  ,GOAL
  ,RANK() OVER( ORDER BY GOAL DESC ) AS ROW_NUM
FROM
   TOT_PLAYER
ORDER BY ROW_ID


해설 : 득점순위를 찾는다. -> RANK 또는 DENSE_RANK 함수 사용

   동일한 득점이 있을 경우 그 다음 순위에 공백이 생긴다 -> RANK 함수 사용

키워드 : RANK


4. 아래와 같은 요건을 SQL 쿼리로 작성하시오. ( 선수 역할을 기준으로 득점 순위 계산 )

    * 동일한 골 기록일 경우 같은 순위 랭크, 그 다음 순위는 RANK에 공백 순위 발생


 ROW_ID

 ROLL

NAME

GOAL

 ROW_NUM

 1

 ST

KANE

15

 1

 2

 ST

SON

15

 1

 3

 ST

 LIORENTE

10

 3

 4

 MF

ERIKSEN

6

 1

 5

 MF

ALLI

4

 2

 6

 MF

LAMELA

4

 2

 7

 MF

MOURA

4

 2

 8

 MF

 WANYAMA

1

 5

 9

 DF

VERTONGHEN

3

 1

 10

 DF

ALDERWEIRELD

2

 2


SQL : 


SELECT
   ROW_ID
  ,NAME
  ,GOAL
  ,RANK() OVER ( PARTITION BY ROLL ORDER BY GOAL DESC ) AS ROW_NUM
FROM
   TOT_PLAYER
ORDER BY ROW_ID

해설 : 포지션 별 득점순위를 찾는다. -> RANK 또는 DENSE_RANK 함수 사용

   동일한 득점이 있을 경우 그 다음 순위에 공백이 생긴다 -> RANK 함수 사용

    포지션을 그룹으로 묶어준다 -> PARTITION BY 사용

키워드 : RANK / PARTITION BY

+ Recent posts