我需要进一步处理例程查询,该查询计算两个(可能更多)表中的几个函数。但是一旦我导入了多个表格,我就会因为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处理多个表上的聚合函数的解决方案。但是当我试图在我的查询中使用代码时,我遇到了错误。
例如那样: Can SQL calculate aggregate functions across multiple tables?
希望有人可以帮助我为我的任务构建一个有效的查询。
[编辑]简单的例子
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,其中一些值出现了几次,结果是错误的。