Closed1
group by と partition byの違い
この違いわかりますか?
SQLでデータを操作してさまざまな抽出を行う際、基本となる操作の1つが、データをなんらかの基準に従ってグループ分けすることです。
SQLを使う時に限らず、私たちは日常生活の中でも、データを整理したり調べたりするときによくこのグループ分けという作業をします。
SQLが持つ句の中で、グループ分けの機能を担うのが、group byとpartition byです。
この2つはどちらも、テーブルを指定されたキーで分割する働きをします。
違うのは、group byの場合、分割後に集約して1行にまとめる操作が入ることだけです。
例えば、次のような幾つかのチームの構成メンバーを表すテーブルを例に取りましょう。
member | team | age |
---|---|---|
大木 | A | 28 |
逸見 | A | 19 |
新藤 | A | 23 |
山田 | B | 40 |
久本 | B | 29 |
橋田 | C | 30 |
野宮 | D | 28 |
鬼塚 | D | 28 |
野宮 | D | 28 |
加藤 | D | 24 |
新庄 | D | 22 |
このテーブルに対して、group by句とpartition by句を使うと、チーム単位の情報を得るクエリが書けます。
どちらの句を使うにせよ、元のTeamsテーブルを次のような部分集合に切り分けてから、sum関数で集約したり、rank関数で順位付けしたりしています。
select member, team, age,
rank() over(partition by team order by age desc) as rn,
dense_rank() over(partition by team order by age desc) as dense_rn,
row_number() over(partition by team order by age desc) as row_num
from Members
order by team, rn;
このスクラップは2023/10/30にクローズされました