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

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回答

2266閲覧

重複するIDの1番目をtrue, 2番目以降をfalse で表示するクエリ(PostgreSQL)

mson

総合スコア11

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クリップ

投稿2019/03/12 11:50

編集2019/03/12 12:05

PostgreSQL9系 を使用しています。
以下のテーブルがあります。
id,name でソートした場合に、id ごとに1レコード目を true 、2レコード目以降を false というフラグを別カラムで表示したいです。

idname
1a001
1a002
2b001
3c001
3c002
3c003

結果イメージ

idnameflag
1a001t
1a002f
2b001t
3c001t
3c002f
3c003f

クエリで表現する方法があれば教えていただけますか。

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

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

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

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

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

yambejp

2019/03/12 11:55

MySQL関係ないならタグ外してください
mson

2019/03/12 12:40

すみません、タグ外しました。
guest

回答3

0

ベストアンサー

unnest() を使うが手っ取り早いですね。
9.18. 配列関数と演算子

SQL

1select * , unnest('{True,False}'::boolean[]) as flg 2from テーブル

追記

勘違いしていましたので、訂正。

SQL

1select * 2 , case when row_number() over(partition by id order by name)=1 3 then True else false 4 end as flag 5from テーブル

投稿2019/03/12 11:56

編集2019/03/12 14:35
sazi

総合スコア25184

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

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

mson

2019/03/12 12:50

これだと 同一IDに true, false が1レコードずつ表示されてしまい、期待するものと異なりました。
mson

2019/03/12 13:03

ありがとうございます。この関数で期待することが表示できました。partition by で id 単位にできるんですね。助かりました。
guest

0

CREATE TABLEや現行のデータを何件かINSERTで提示したほうが的確なコメントが付きますが、こんな感じか?

SQL

1SELECT 2 A.id 3 , A.name 4 , CASE 5 WHEN A.RN = 1 THEN 'true' 6 ELSE 'false' 7 END AS flag 8FROM( 9 SELECT 10 ROW_NUMBER() OVER(PARTITION BY T1.id ORDER BY T1.id, T1.name) AS RN 11 , T1.* 12 FROM TABLE1 T1 13 ) AS A 14ORDER BY 15 A.id 16 , A.name ;

投稿2019/03/12 13:04

Orlofsky

総合スコア16415

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

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

0

一般的にランク付けはこう

SQL

1create table tbl(id int primary key, uid int,name varchar(20)); 2insert into tbl values 3(1,1,'a001'), 4(2,1,'a002'), 5(3,2,'b001'), 6(4,3,'c001'), 7(5,3,'c002'), 8(6,3,'c003'); 9 10select id,uid,name,(select count(*)+1 from tbl where uid=t1.uid and name<t1.name) as rank 11from tbl as t1 12

したがって

SQL

1select id,uid,name,case when (select count(*)+1 from tbl where uid=t1.uid and name <t1.name )=1 then 'true' else 'false' end as flg 2from tbl as t1 3

投稿2019/03/12 12:05

yambejp

総合スコア114814

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

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

mson

2019/03/12 12:21

ご回答ありがとうございます。 すみません、実際は、from 句の tbl の部分は、実テーブル名ではなく、SELECT クエリ結果で生成される tbl になります。 その場合、どのように書けば良いでしょうか。お手数ですが宜しくお願い致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問