ブール型フラグを含むレコードを取得しようとしています。特定の結果セットのカラムに少なくとも1つのNOT NULL値がある場合はtrue、すべての値がNULLの場合はfalseです。結果のNULL/NOT NULLフラグを最適化PostgreSQLクエリ
サンプルデータがある必要があり、この場合、結果は
SELECT "my column 1", "my column 2", "my column 3", "my column 4", "my column 5"
FROM my_data
WHERE date BETWEEN :start AND :end
"my column 1" "my column 2" "my column 3" "my column 4" "my column 5"
NULL NULL 25.2 NULL 1.12
15.28 NULL NULL NULL 2.25
NULL NULL 13.9 NULL 3.03
359.00 NULL 125.5 NULL 4.15
NULL NULL 152.2 NULL 5.99
NULL NULL NULL NULL 6.35
を設定します。
"my column 1" "my column 2" "my column 3" "my column 4" "my column 5"
t f t f t
次PostgreSQLのクエリん私は実際にそれが最初とすぐに、各サブクエリを終了する(必要な正確に何NOT NULL値が検出されました)、最適化することはできますか?:
WITH x AS (SELECT * FROM my_data WHERE date BETWEEN :start AND :end)
SELECT
EXISTS(SELECT * FROM x WHERE "my column 1" IS NOT NULL) AS "my column 1",
EXISTS(SELECT * FROM x WHERE "my column 2" IS NOT NULL) AS "my column 2",
EXISTS(SELECT * FROM x WHERE "my column 3" IS NOT NULL) AS "my column 3",
EXISTS(SELECT * FROM x WHERE "my column 4" IS NOT NULL) AS "my column 4",
EXISTS(SELECT * FROM x WHERE "my column 5" IS NOT NULL) AS "my column 5"
私は、各列の名前を言及することなく、短くまたは全般的に書くことができると思った。
それは打撃性能ですか? –
CASEを使用できますか? https://www.postgresql.org/docs/9.4/static/functions-conditional.html – lionbtt
@Ranadip Dutta:いいえ、しかし、私は、各列名に言及することなく、短くても普遍的にでも書くことができると思いました。 – Paul