skillup

技術ブログ

Database

EXISTSと集合

投稿日:

前回に引き続きEXISTSの問題です。

下記のようなテーブル(projects)があり、

project_id | step_nbr | status
————+———-+——–
AA100 | 0 | 完了
AA100 | 1 | 待機
AA100 | 2 | 待機
B200 | 0 | 待機
B200 | 1 | 待機
CS300 | 0 | 完了
CS300 | 1 | 完了
CS300 | 2 | 待機
CS300 | 3 | 待機
DY400 | 0 | 完了
DY400 | 1 | 完了
DY400 | 2 | 完了

1番まで完了しているproject_idを求めるとします。回答として下記のデータが得られればOKです。

project_id
————
CS300
DY400

※本ではstp_nbr=2が完了しているもの(上記の例でいうとDY400)を除いていましたが、私の場合含めました。

この場合、EXISTSの考え方を使うと下記のようになるでしょう。

この場合も、step_nbrが0と1をともに満たしていないといけないのでEXISTSではなく逆のNOT EXISTSを使います。

なおHAVINGの考えを使って下記のように解くこともできます。こっちのほうがイメージはしやすいかも・・・・

イメージとしては上記のSQLから下記のようなテーブルをイメージしGRUOP BYしてadd_pointの累積を考えます。

project_id | step_nbr | status | add_point
————+———-+——–+———–
AA100 | 0 | 完了 | 1
AA100 | 1 | 待機 | 0
AA100 | 2 | 待機 | 0
B200 | 0 | 待機 | 0
B200 | 1 | 待機 | 0
CS300 | 0 | 完了 | 1
CS300 | 1 | 完了 | 1
CS300 | 2 | 待機 | 0
CS300 | 3 | 待機 | 0
DY400 | 0 | 完了 | 1
DY400 | 1 | 完了 | 1
DY400 | 2 | 完了 | 0

-Database
-

執筆者:


comment

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

関連記事

no image

herokuでMySQL

昨日に続き、heroku+MySQLのメモです。 herokuはディフォルトではPostgreSQLですが、アドオンを使うとMySQLも使えるようになります。 使い方ですが、herokuの管理画面でク …

no image

netbeansのJPQL補助機能

JPAでは基本的に生のSQLではなく、JPQLを使って書きます。 SQLでもタイプミスにイライラさせられることは多いのですが、JPQLはもっとですね・・・爆 そこで使えるのがNetbeansの入力補助 …

no image

サブクエリの使い方

以前も少し学習しましたが、今回からはサブクエリの扱い方です。特に異なった行の比較(年度計算など)に関して行われる自己結合をつかったものが非常に強力です。 例によってここを学習しています。 下記のような …

no image

CASE式のすすめ その2

本日も「達人に学ぶSQL徹底指南書」を地道に進めていきます。 Contents1 CASE式の利用2 UPDATE文のCASE3 テーブル同士のマッチング CASE式の利用 私自身はCHECK制約を使 …

no image

データベースの権限設定

データベースを作成するときに

と入力していますが、ほぼ機械的にこれを売っているのでこれを機にどんな使い方があるのかを調べてみました。 …