質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Q&A

解決済

1回答

451閲覧

SQLにて条件付きIF文で抽出したい

ha_horse

総合スコア20

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

0グッド

0クリップ

投稿2021/07/02 07:58

以下のデータがあったとします。

|thread_id|user_id|send_date|flag|rank|
|:--|:--:|--:|
|100|1|2021-06-15|1|1|
|100|2|2021-06-16||2|
|200|3|2021-06-15||1|
|200|4|2021-06-16|1|2|
|200|5|2021-06-17|1|3|

この時rank = 1の時、flag=1のものだけ抽出したいです。

なので取り出したいデータとしては以下になります。

|thread_id|user_id|send_date|flag|rank|
|:--|:--:|--:|
|100|1|2021-06-15|1|1|
|100|2|2021-06-16||2|
|200|4|2021-06-16|1|2|
|200|5|2021-06-17|1|3|

rank=1の時だけflag=NULLを除外したい時どのようにして記述すれば良いのでしょうか。
どなたかご教授いただけると幸いです。

rankはthread_id区切りで日付降順からの順位になります。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sazi

2021/07/02 09:41

rank=1以外のデータの表示条件は無いという事で良いですか? rank=1でflag Nullの場合でRankが1以外でflagが立っていないものは、対象にしないという条件はあったりしないですか?
guest

回答1

0

ベストアンサー

2つの表を union select で統合する。という発想で実現できます。

表A: rank <> 1 (rank が 1ではないものすべて)
表B: rank =1 and flag=1 (rank が 1で フラグが立っているもののみ)

表A union select 表B

補足

条件で悩んだときは、一旦、「デシジョンテーブル」を作ってみるといいですよ。

きちんと表にすると、不思議なもので、頭の中が整理できて、どうやったらデータが得られるかクリアになります。
それに、デシジョンテーブルがあると、言葉で説明されるよりも、条件が具体化されるので他人から適切なアドバイスが受けやすくなります。

イメージ説明

投稿2021/07/02 08:26

編集2021/07/02 10:37
Yoshi88

総合スコア623

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sazi

2021/07/02 09:44 編集

Unionではなく、or条件で済みませんか?
ha_horse

2021/07/02 09:58

Unionでもorでもどちらでもできました。。! ありがとうございます!
Yoshi88

2021/07/02 10:02

ORでもできますね。(^^)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問