問題
次のクエリでplr_stations
は、 が 2 回呼び出されます。
WHERE
句を制限するために 1 回。と- 返された結果の数をカウントするために 1 回。
コードは次のようになります。
SELECT
m.*,
s.*,
(
SELECT
count(1)
FROM
climate.plr_stations('48.5146','-123.4447')
) AS count_stations
FROM
climate.station s,
climate.measurement m,
(
SELECT
id
FROM
climate.plr_stations('48.5146','-123.4447')
) stations
WHERE
s.applicable AND
s.id = stations.id AND
m.station_id = s.id AND ...
このクエリの結果は、日付クエリによって集計されます。
ソリューション
関数呼び出しの結果を一時テーブルまたは配列変数に入力します。
更新 #1
関数呼び出しのパラメーターで定義された球面ポリゴン内にあまりにも多くのステーションが存在する場合、関数呼び出しはステーションのサンプルをランダムに選択します。
アップデート #2
完全なクエリを開始する日付クエリ集計は次のようになります。
SELECT
extract(YEAR FROM m.taken) AS year_taken,
avg(m.amount) AS amount,
count(m.amount) AS count_measurements,
md.count_stations,
min(md.elevation) AS elevation_min,
max(md.elevation) AS elevation_max
FROM
climate.measurement m, (
SELECT
m.*,
s.*, ...
質問
他にどのようにして冗長な呼び出しを排除できますか?
ありがとうございました。