skillup

技術ブログ

Database

SQL基礎 ウィンドウ関数

投稿日:

SQLの基礎(主にSELECT)を

  • whereはレコードに対しての集計、havingはレコードの集合に対しての集計
  • ビューは一時的なselect文なのでサブクエリとほぼ等価
  • 条件分岐で出力項目を変えたいときはcase。
  • group byの集計をしないタイプがウィンドウ関数。

※ウィンドウ関数に関して

例として下記のようなレコード(addressテーブル)があった場合、

address name 年齢
東京 山田 32
千葉 田中 35
東京 佐藤 39
千葉 鈴木 25
千葉 渡邊 49

以下のようなSQLをかくと

下記のような結果が得られる。グループ化はするけど、行数はselectとまったく一緒。

address | count
東京   | 2
東京   | 2
千葉  | 3
千葉  | 3
千葉  | 3

ウィンドウ関数は集計以外の関数でもrank,rou_number等で使われる。

以下のようなSQLをかくと

下記のような結果が得られる。

name | age | rnk
渡邊   | 49  | 1
佐藤   | 39  | 2
田中   | 35 | 3
山田   | 32 | 4
鈴木   | 25 | 5

参考文献
SQL実践入門

-Database
-

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

cakePHPでのマイグレーション

開発を続けているとデータベースのカラムの構造が変更するってことはしょっちゅうですが、管理がいい加減だとメンバー間でテーブルの構造が変わっていたり、本番と開発で違ってくるなどのトラブルが続出します。 そ …

no image

HAVING句について NULL時の動き

HAVING句のNULLがあった時の挙動にたいしてメモリます。 COUNTの処理 対象上の列数を数えるのにCOUNTを使うと思いますが、COUNT(*)とCOUNT(列名)では動きが若干違っており、前 …

no image

SQL基礎 case&groupbyの活用について

主に集計タイプの計算で大活躍するgroupbyについて。 主な用途は集計とカット。特にcase式と連動した集計はかなり使える 例 nameとageで構成されたテーブルがあるとして、年代ごとの人数を出し …

no image

データベースのテスト環境作成

現在作っているシステムのリリースが近づいており、本番に近い環境を作成しお客様に見てもらうことに。 こういった手順はマニュアル化しておいたほうが楽だろうと思い、自分的にメモ 1 現状運用されているデータ …

no image

データベースアンチパターン・グレーパターンまとめ

本で勉強したものと自分で個人的に経験したことのまとめ Contents1 値渡しと参照渡しの混同2 型の制約が弱い3 変更していいデータ、していけないデータ4 参照系と履歴系のデータを区別する5 リレ …