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個だけで効果的です
Reference
この問題について(SQL練習8), 我々は、より多くの情報をここで見つけました
https://velog.io/@suland/SQL연습-8
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
SELECT name, goals,rownum
FROM players
ORDER BY goals DESC
SELECT name,goals,rownum
FROM (SELECT name, goals
FROM players
ORDER BY goals DESC)
SELECT name, goals,RANK() OVER (ORDER BY goals DESC ) as ranking
FROM players
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);
SELECT name,NVL(assist,0)
FROM players
SELECT name,CONCAT(NVL(assist,0),'개') 어시스트
FROM players
Reference
この問題について(SQL練習8), 我々は、より多くの情報をここで見つけました https://velog.io/@suland/SQL연습-8テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol