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にクローズされました