SQL練習8


複数のキーワードを使用してみる3


(ROWNUM,RANK,NVL)

1 ROWNUM


ROWNUMはソートに使用されます.
選手テーブルで一番ゴールが多い順に並べて順位をつけたいです.
SELECT name, goals,rownum
FROM players
ORDER BY goals DESC

ROWNUMだけを追加すると順序が乱れてしまいます.
サブクエリを作成して使用しました
SELECT name,goals,rownum
FROM (SELECT name, goals
      FROM players
      ORDER BY goals DESC)

順位がおかしい同じゴールの数が重複しても順位が分かれてしまうからだ.
もしそうであれば、繰り返し値を同じ順序に置く必要があります.

2 RANK


この場合はRANK関数を単独で使用します
SELECT name, goals,RANK() OVER (ORDER BY goals DESC ) as ranking
FROM players
RANK関数の記述方式はROWNUMとは異なる.

順位が良さそうです.

3 NVL


NVL関数の役割は、空のカラムの値を特定の値に置き換えることです.
選手表に現在の空の値のセルが含まれていないので、選手を追加します.
INSERT INTO PLAYERS(player_id,name,birth_date,nation,height,weight,goals,assist,club_id)
VALUES(players_seq.nextval,'마커스 래쉬포드','1994-09-08','잉글랜드',181,69,9,null,1);

INSERT INTO PLAYERS(player_id,name,birth_date,nation,height,weight,goals,assist,club_id)
VALUES(players_seq.nextval,'앙토니 마르시알','1994-09-08','프랑스',179,69,7,null,1);

INSERT INTO PLAYERS(player_id,name,birth_date,nation,height,weight,goals,assist,club_id)
VALUES(players_seq.nextval,'사디오 마네','1992-04-10','센네갈',175,69,5,null,3);

3人の選手が追加され、アシストはいずれも空だった.
CONCAT関数に「個」を付けると、空の値であるため、数値は加算されません.

したがって,null時にNVL関数を用いて0と表示する.
SELECT name,NVL(assist,0)
FROM players
これによりnullは0になります.
CONCAT関数と一緒に使用する場合
SELECT name,CONCAT(NVL(assist,0),'개') 어시스트
FROM players
このように中に入れておけばいいです

出てくるのは0個だけで効果的です