ふりかえり

筆者
本記事は、SQLの基本、実務使用例編になります。
SQLの基礎に関しましては、
【初学者必見!】SQLの超基礎編の記事をご覧くださいませ。

A子
本編に入ります!
row number partition byの基本構文

筆者
まずは、基本構文から見ていきましょう!
row_number() over(partition by グループにしたい列 order by 並べたい列)
partition by:どのグループごとに番号を振るか(グループ分け)
order by:番号をどの順で振るか(並び順)
実務レベルの使用例を見ていこう!

筆者
実際に、SQLを使用してデータを確認していきましょう。
SQLに関しては以下を使用して解説していきます。
create table文、select文、insert文、update文、delete文、
drop table文、につきましては、過去にアップロードした
【初学者必見!】SQLの超基礎編の記事をご覧くださいませ。

A子
目次の、「ふりかえり」のところにそれぞれの記事のリンクが
貼ってあるよ!
または、サイドバーのカテゴリーにSQLがあるから、そちらからでも
参照できます!
Oracle Live SQLで実行していきます!
今回、実行するSQLの一覧
CREATE TABLE 文
create table employees (
employee_id varchar2(10),
department varchar2(20),
hire_date date
);
INSERT 文
insert into employees (employee_id, department, hire_date) values ('A001', '総務', to_date('2020-01-01', 'yyyy-mm-dd'));
insert into employees (employee_id, department, hire_date) values ('A002', '総務', to_date('2020-03-01', 'yyyy-mm-dd'));
insert into employees (employee_id, department, hire_date) values ('B001', '開発', to_date('2019-05-01', 'yyyy-mm-dd'));
insert into employees (employee_id, department, hire_date) values ('B002', '開発', to_date('2021-04-01', 'yyyy-mm-dd'));
SQL(最古の入社者を各部署で1名)
with ranked_employees as (
select
employee_id,
department,
hire_date,
row_number() over(partition by department order by hire_date) as rn
from
employees
)
select
employee_id,
department,
hire_date
from
ranked_employees
where
rn = 1;

| 項目 | 内容 |
|---|
with ranked_employees as (...) | サブクエリで、各部署ごとに連番を付ける(古い順) |
partition by department | 部署ごとにグループ化 |
order by hire_date | 入社日が早い人が先頭になるように並べる |
where rn = 1 | 各部署の中で一番早く入社した人だけを抽出 |
最新データを取りたい場合は?
order by hire_date desc にするだけでOK!
row_number() over(partition by department order by hire_date desc) as rn

まとめ

筆者
row number partition byについて解説しました。
次回もお楽しみに!










コメント