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

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

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

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

3回答

636閲覧

重複しているレコードかつ、重複している場合にのみ特定のレコードを除外したい

TTMARI

総合スコア13

PostgreSQL

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2018/12/05 01:35

①テーブルを②結果のように表示させたいのですが、ロジックが思いつきません。
なにかよい方法があればご教授お願いいたします。
条件↓
・①列1の重複は除外する
・①列1が重複している場合のみ,①列2のBも除外する

①テーブル
1   2     
A   A
A   A
A   B
B   A
C   A
C   B
D   B

②結果
1   2
A   A
B   A
C   A
D   B

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

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

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

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

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

m.ts10806

2018/12/05 01:38

複数条件があるようですしひとつずつやって組み合わせてみては?出来るところは0ではないと思います
guest

回答3

0

質問にCREATE TABLEと現行のデータのINSERTを提示すると適切なコメントが付き易いですが、インラインビューを入れ子にしてSELECTを3つ記述するとできそうです。

・①列1の重複は除外する

いちばん下のインラインビューの中で SELECT DISTINCT ...

・①列1が重複している場合のみ,①列2のBも除外する

その外のインラインビューで
SELECT ROW_NUMBER() OVER (PARTITION BY ... で列1毎に連番を振る。

その外のSELECT で 連番 = 1 のデータだけ抜き出す。

投稿2018/12/05 02:14

Orlofsky

総合スコア16415

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

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

TTMARI

2018/12/20 05:35

今回はexistsで解決できました。 ご協力ありがとうございました。
guest

0

ベストアンサー

SQL

1select * from テーブル t1 where col2<>'B' 2union 3select * from テーブル t2 where col2='B' and not exists(select 1 from テーブル where col1=t2.col1 and col2<>'B')

Bの扱いがはっきりすると、もっと効率よくなるかもしれません。

投稿2018/12/05 02:14

sazi

総合スコア25195

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

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

TTMARI

2018/12/20 05:32

今回はexistsで解決できました。 ご協力ありがとうございます。
guest

0

列1でgroup byして列2はmax()やmin()で抜き出す

投稿2018/12/05 02:11

yambejp

総合スコア114839

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

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

TTMARI

2018/12/20 05:35

今回はexistsで解決できました。 ご協力ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問