Sql 跨两个表的聚合函数
我需要一个查询,它可以跨两个或更多的表计算多个函数。但一旦我导入了多个表,就会得到由连接条件引起的奇怪结果。首先,我使用了这个查询:Sql 跨两个表的聚合函数,sql,postgresql,Sql,Postgresql,我需要一个查询,它可以跨两个或更多的表计算多个函数。但一旦我导入了多个表,就会得到由连接条件引起的奇怪结果。首先,我使用了这个查询: 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
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将是一个合适的解决方案。或某个子查询或其他联接条件。但我尝试的都是错误或错误的结果值 我发现了一些使用UNION处理多个表上的聚合函数的解决方案。但当我试图在查询中匹配代码时,我出现了错误 例如: 希望有人能帮助我为我的任务建立一个工作查询 [编辑]简单示例 西德隆萨雷尔酒店
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”的实际计算值要高得多
另一个查询:
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,某些值出现多次,结果是错误的 您能创建简单的示例输入和所需的输出吗?是的,我可以自己来演示如何聚合联接表,但毕竟,这是你的问题。你不能写一些像selectsomeid,sum。。。从表1 t1左连接选择someid,求和。。。从表2中,按t2上的someid t2分组。someid=t1.someid?这样,您可以在合并之前对第二个结果进行分组,并避免相乘。使用DISTINCT显然是错误的方法。如果DISTINCT引用的是另一列,而不是要在函数中使用的列,DISTINCT将是正确的解决方案。对要操作聚合函数的另一列使用group by。是否已检查(未聚合)连接条件ST_是否覆盖。。。实际上,当使用SELECT*时,会产生正确的元组集。问题是,我不想以任何方式对结果进行分组。唯一需要的输出应该是带有聚合计算的一行