skillup

技術ブログ

Database

サブクエリ 分析関数の代替案として

投稿日:2016年11月17日 更新日:

今回は分析関数系のネタです。

以前にも分析関数を少し学習しましたがMySQLにはないので、サブクエリを使い書くことになります。

下記のような入出金講座があるとします。
Accounts

prc_date | prc_amt
————+———
2006-10-26 | 12000
2006-10-28 | 2500
2006-10-31 | -15000
2006-11-03 | 34000
2006-11-04 | -5000
2006-11-06 | 7200
2006-11-11 | 11000

ここから現在の口座残高を求めてみます。ここでは分析関数を使うと非常に楽です。例えば下記のように書いてみましょう

prc_date | prc_amt | onhand_amt

————+———+————
2006-10-26 | 12000 | 12000
2006-10-28 | 2500 | 14500
2006-10-31 | -15000 | -500
2006-11-03 | 34000 | 33500
2006-11-04 | -5000 | 28500
2006-11-06 | 7200 | 35700
2006-11-11 | 11000 | 46700

ただ残念なことにMySQLでは入っていないのでこれをサブクエリを使って求めます。

これもやはり自己結合でがんがえると物凄いわかりやすいです。

-Database
-

執筆者:


comment

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

関連記事

no image

SQL基礎 case式について

case式に関して。 集約系の関数では複雑な処理を一気に行うことができる。 case式は1列のみ有効。複数の列に対して行うことはできない。 case ~ when ・・・thenではwhenが評価され …

no image

PostgreSQLについて

本日はポスグレ(PostgreSQL)について。 自分はほとんどMySQLだったので、主にMySQLとの比較について書いていきます。 Contents1 アーキテクチャの違い1.1 MySQL1.2 …

no image

浮動小数点に関して

金額計算なんかでfloatを使うと誤差が出るっていうのは基礎的な話ではありますが、背景知識を含めて理解しておこうと思ったのでメモります。 Contents1 float,doubleでの誤差2 金額の …

no image

postgresの外部キー制約やcascadeについて

外部キーを貼っておくと、当然、削除などを行うときにエラーになり、truncateも当然できなくなりますが、cascadeをつけることで、関連するテーブルまで一気にtruncateされます。 [cray …

no image

sql_modeに関して

開発では動いていたのに本番ではint型のカラムで空白が入らない!みたいなエラーが出て、データベースにデータが入らないことが発覚し、調査をすることに・・・ sql_modeが原因でした・・・ sql_m …

アーカイブ