1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【PostgreSQL】n個以上紐付きのあるデータをSQLで抽出する【window関数】

Posted at

2つのテーブル間に1:多のリレーションシップあり、その中でn個以上紐付きのあるデータを洗い出したいことがあった。
その時にwindow関数を使用したので、忘れないように記録しておく。

やりたいこと

複数のデータの紐付きがあるものを抽出する。
今回は注文を複数している顧客のidを抽出してみる。

テーブル構成

  • 顧客のデータを保存するusersテーブル
  • 注文データを保存するordersテーブル
  • usersとordersは1:多の関係(userは複数のorderを持つことができる)

SQL

集約関数だと複数の行が一つにまとまってしまうため、window関数を使用して対象のデータを洗い出す。

SELECT
  u.id
FROM
  users AS u
  INNER JOIN (
    SELECT
      count(id) OVER (PARTITION BY user_id) AS counter,
      *
    FROM
      orders
  ) AS o ON u.id = o.user_id
  AND o.counter > 2;

参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?