[解決済み] postgresを使用してstring_aggのようにarray_aggでnull値を除外する方法は?
2022-06-11 20:28:42
質問
もし私が
array_agg
を使って名前を集めると、カンマで区切られた名前が得られますが、万が一、その中に
null
の値がある場合、そのnullも名前として集計されます。例えば、:
SELECT g.id,
array_agg(CASE WHEN g.canonical = 'Y' THEN g.users ELSE NULL END) canonical_users,
array_agg(CASE WHEN g.canonical = 'N' THEN g.users ELSE NULL END) non_canonical_users
FROM groups g
GROUP BY g.id;
を返すと
,Larry,Phil
ではなく、単に
Larry,Phil
と表示されます (私の 9.1.2 では
NULL,Larry,Phil
).
その代わり、もし私が
string_agg()
を使用すると、名前だけが表示されます (空のカンマやヌルは含まれません)。
問題は、私が
Postgres 8.4
がサーバにインストールされており
string_agg()
はそこでは動作しません。
array_aggをstring_agg()と同様に動作させる方法はありますか?
どのように解決するのですか?
select
id,
(select array_agg(a) from unnest(canonical_users) a where a is not null) canonical_users,
(select array_agg(a) from unnest(non_canonical_users) a where a is not null) non_canonical_users
from (
SELECT g.id,
array_agg(CASE WHEN g.canonical = 'Y' THEN g.users ELSE NULL END) canonical_users,
array_agg(CASE WHEN g.canonical = 'N' THEN g.users ELSE NULL END) non_canonical_users
FROM groups g
GROUP BY g.id
) s
あるいは、より単純で安価な方法として
array_to_string
を使うことで、NULLを排除することができます。
SELECT
g.id,
array_to_string(
array_agg(CASE WHEN g.canonical = 'Y' THEN g.users ELSE NULL END)
, ','
) canonical_users,
array_to_string(
array_agg(CASE WHEN g.canonical = 'N' THEN g.users ELSE NULL END)
, ','
) non_canonical_users
FROM groups g
GROUP BY g.id
関連
-
[解決済み] PostgreSQLのCREATE DATABASE IF NOT EXISTSをシミュレートしてみませんか?
-
[解決済み] 指定されたスキーマにテーブルが存在するかどうかを確認する方法
-
[解決済み] MySQLでコマンドラインを使用してSQLファイルをインポートするにはどうすればよいですか?
-
[解決済み] MongoDBに "like "を使ってクエリを実行する方法
-
[解決済み] SQL Serverで、指定したテーブルを参照しているすべての外部キーを一覧表示するにはどうすればよいですか?
-
[解決済み] postgres の主キー配列が同期しなくなったときにリセットする方法は?
-
[解決済み] SQL Serverには、.NETのMath.Maxのような2つの値を取るMax関数はありますか?
-
[解決済み] Selectステートメントで特定のフィールドの重複を検索する
-
[解決済み] Postgres でサブクエリを使用してテーブルの行を更新する
-
[解決済み] SQL ServerでINNER JOINを使用して削除するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] JOINとINNER JOINの違いについて
-
[解決済み] 各グループの最後のレコードを取得する - MySQL
-
[解決済み] INNER JOINよりもCROSS APPLYを使用すべきなのはどのような場合ですか?
-
[解決済み] 最初の行への結合方法
-
[解決済み] SQLite - UPSERT *not* INSERT or REPLACE
-
[解決済み] NOT IN vs NOT EXISTS
-
[解決済み] SQL Server 2008を使用してIDENTITY_INSERTをオン/オフする方法は?
-
[解決済み] 文字列の一部をUPDATEおよびREPLACEする。
-
[解決済み] 項目xにアクセスできるように文字列を分割するにはどうすればよいですか?
-
[解決済み] 既存のカラムにIDを追加する