teratail header banner
teratail header banner
質問するログイン新規登録

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

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

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

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

Q&A

解決済

1回答

941閲覧

カラム毎の重複を削除した結果を取得したいです

退会済みユーザー

退会済みユーザー

総合スコア0

PostgreSQL

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

0グッド

0クリップ

投稿2022/02/02 13:46

編集2022/02/04 16:01

0

0

カラム毎の重複を削除した結果を取得したいです。

distinctではレコード単位の重複削除であり、selectしたカラム毎の重複削除になりません。

また、取得項目毎のselect distinct文をunionする方法も考えましたが、
最終的には6カラムほどselectするので、6つunionする方法もあまり綺麗ではありません。

実現方法をご存知の方にご教示いただきたいです。

下記は実現したい結果のイメージです。

PostgreSQL

1-- 取得元のテーブル 2create table food ( 3 food_code character varying(100) 4 ,food_name character varying(100) 5 ,produnction_code character varying(100) 6 ,produnction_name character varying(100) 7); 8 9-- データを投入 10insert into food values( 11 '001' 12 ,'りんご' 13 ,'AAA' 14 ,'会社AAA' 15); 16 17insert into food values( 18 '001' 19 ,'りんご' 20 ,'BBB' 21 ,'会社BBB' 22); 23 24insert into food values( 25 '002' 26 ,'バナナ' 27 ,'AAA' 28 ,'会社AAA' 29); 30-- 試したselect文 31select 32 array_to_string(food_code,','), 33 array_to_string(food_name,','), 34 array_to_string(produnction_code,',') 35-- into out_food_code,out_food_name, out_produnction_code 36from food;

2022/2/2 23:09 追記
下記select文で行えるかもしれませんが、手元に実行環境がないため、3日に試します。

select array_to_string(array_agg(distinct food_code), ','), array_to_string(array_agg(distinct food_name), ','), array_to_string(array_agg(distinct produnction_code), ',') -- into out_food_code,out_food_name, out_produnction_code from food

2022/2/3 19:27 追記
実現したい取得結果は下記の通りです。

food_codefood_nameprodunction_code
001,002りんご,バナナAAA,BBB

下記SQLにて実現は出来ましたが、よりすっきりとしたコードに出来ないか模索中です。

select array_to_string(array_agg(distinct food_code), ','), array_to_string(array_agg(distinct food_name), ','), array_to_string(array_agg(distinct produnction_code), ',') -- into out_food_code,out_food_name, out_produnction_code from food

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

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

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

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

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

sazi

2022/02/02 15:10

例示したデータをどのように纏めた結果にしたいのかも質問に追記して下さい。
退会済みユーザー

退会済みユーザー

2022/02/03 10:33

失礼致しました。 質問に追記を行いました。
sazi

2022/02/04 08:49

項目ごとにマージするんですから、それ以上コードを短縮できないかと思います。 目的が分かりませんが、マージした後の項目の並びが一致してなくて大丈夫なんでしょうか。
退会済みユーザー

退会済みユーザー

2022/02/04 16:04

>項目ごとにマージするんですから、それ以上コードを短縮できないかと思います。 おっしゃる通り、この形で進めたいと思います。 取得結果のカラム名に誤記があり、項目の並びが意図したものではありませんでした。 失礼致しました。
guest

回答1

0

ベストアンサー

下記SQLにてカラム毎の重複を削除し、カンマ区切りの文字列で取得する運びとなりました。

select
array_to_string(array_agg(distinct food_code), ','),
array_to_string(array_agg(distinct food_name), ','),
array_to_string(array_agg(distinct produnction_code), ',')
-- into out_food_code,out_food_name, out_produnction_code
from food

投稿2022/02/04 16:06

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問