1

さらに作業ルーチンを作成するには、2 つの (場合によってはそれ以上の) テーブルで複数の関数を計算するクエリが必要です。しかし、複数のテーブルをインポートすると、JOIN 条件が原因で奇妙な結果が得られました。最初にそのクエリを使用しました:

SELECT
sum(s.bedarf2050_kwh_a) AS bedarf_kWh_a, 
sum(s.bedarf2050_kwh_a)*0.2 AS netzverlust,
sum(s.bedarf2050_kwh_a) + sum(s.bedarf2050_kwh_a)*0.2 AS gesamtbedarf,
sum(pv.modulflaeche_qm) AS instbar_modulflaeche_qm

FROM 
siedlungsareale_wbm s, pv_st_potenziale_gis pv

WHERE 
s.vg_solar LIKE '%NWS 2%' 
AND 
ST_Covers(s.geom, pv.geom);

DISTINCT で sum を使用すると、一部の正確な値が返されますが、すべての入力値が一意である場合に限られます。それは私が使用できる解決策ではありません:

SELECT 
SUM(DISTINCT s.bedarf2050_kwh_a) AS bedarf_kWh_a,
SUM(DISTINCT s.bedarf2050_kwh_a)*0.2 AS netzverlust,
SUM(DISTINCT s.bedarf2050_kwh_a) + SUM(DISTINCT s.bedarf2050_kwh_a)*0.2 AS gesamtbedarf,
SUM(pv.modulflaeche_qm) AS instbar_modulflaeche_qm,
(SUM(DISTINCT s.bedarf2050_kwh_a) + SUM(DISTINCT s.bedarf2050_kwh_a)*0.2)*0.01499 AS startwert_speichergroesse

FROM
siedlungsareale_wbm s, pv_st_potenziale_gis pv

WHERE
pv.vg_solar LIKE '%NWS 2%'

AND
ST_Covers(s.geom, pv.geom);

DISTINCT が関数で使用する列ではなく、別の列を参照している場合、DISTINCT は適切なソリューションです。または、サブクエリまたはその他の JOIN 条件。しかし、私が試したすべては、エラーまたは誤った結果値で実行されました。

UNION を使用して、複数のテーブルの集計関数を処理するいくつかのソリューションを見つけました。しかし、クエリにコードを当てはめようとすると、エラーが発生しました。

たとえば、 SQL は複数のテーブルにまたがる集計関数を計算できますか?

誰かが私のタスクの作業クエリを作成するのを手伝ってくれることを願っています.

[編集]簡単な例

siedlungsareale

id | bedarf2050_kWh_a | a | b | c | vg_solar | geom
---|------------------|---|---|---|----------|-----
1  |               20 |   |   |   | NWS 2    | xxxxx
2  |               10 |   |   |   | NWS 2    | xxxxx
3  |               30 |   |   |   | NWS 2    | xxxxx
4  |                5 |   |   |   | NWS 2    | xxxxx
5  |               15 |   |   |   | NWS 2    | xxxxx

sum = 80

pv_st_potenziale_gis

id |  modulflaeche_qm | x | y | z | geom
---|------------------|---|---|---|---------
1  |            10    |   |   |   | xxxxx
2  |            10    |   |   |   | xxxxx
3  |            20    |   |   |   | xxxxx
4  |            10    |   |   |   | xxxxx
5  |            30    |   |   |   | xxxxx
6  |            30    |   |   |   | xxxxx
7  |            10    |   |   |   | xxxxx
8  |            10    |   |   |   | xxxxx
9  |            10    |   |   |   | xxxxx
10 |            10    |   |   |   | xxxxx

sum = 140


SELECT sum(s.bedarfxxxx) AS bedarf, sum(pv.mflaeche) As mflaeche
FROM siedlungsareale s, pv_st_potenziale_gis pv
WHERE s.vg_solar LIKE '%NWS 2%' AND ST_Covers(s.geom,pv.geom);

期待される正しい結果:

bedarf   | mflaeche
---------|----------
      80 |      140

そこで、「siedlungsareale」から「bedarf」列のすべての値と、「pv_st_potenziale_gis」から「mflaeche」のすべての値の合計を取得します。

しかし、このクエリを使用して列 'bedarf' の実際に計算された値は、CROSS JOIN 条件のためにはるかに高くなります。

そして他のクエリ:

SELECT sum(DISTINCT s.bedarfxxxx) AS bedarf, sum(DISTINCT pv.mflaeche) As mflaeche
FROM siedlungsareale s, pv_st_potenziale_gis pv
WHERE s.vg_solar LIKE '%NWS 2%' AND ST_Covers(s.geom,pv.geom);

戻り値:

bedarf   | mflaeche
---------|-----------
     80  |      60

「bedarf」の正確な値は、値が一意であるためです。しかし、いくつかの値が複数回発生するmflaecheの場合、結果は間違っています。

4

0 に答える 0