PostgreSQL group by以获取唯一值并添加列

ne5o7dgx  于 2023-05-06  发布在  PostgreSQL
关注(0)|答案(4)|浏览(126)

我有两张这样的table:
表A**
| 身份证|和值|城市|
| --------------|--------------|--------------|
| 1|十四岁|巴黎|
| 1|四个|巴黎|
| 二|10个|柏林|
| 三|六十八|米兰|
| 四个|五十一|伦敦|
| 三|二|米兰|

表B

身份证城市格姆
1巴黎多面体(XXX)
柏林多面体(XXX)
米兰多面体(XXX)
四个伦敦多面体(XXX)

我想为所有城市选择一个字段(sum_value)的总和,并将城市几何添加到其中。我使用一个group by来将城市作为唯一值。下面的代码可以做到这一点:

SELECT SUM(tablea.sum_value), tableb.city
FROM tablea, tableb
WHERE tablea.id = tableb.id
GROUP BY  tableb.city

所以我得到这样的结果:
| 总和|城市|
| --------------|--------------|
| 十八岁|巴黎|
| 10个|柏林|
| 七十个|米兰|
| 五十一|伦敦|
为了添加城市几何图形,我尝试了以下操作,但没有给予预期的结果。城市价值不再是唯一的,SUM也不起作用。

SELECT SUM(tablea.sum_value), tableb.city, tableb.geom
FROM tablea, tableb
WHERE tablea.id = tableb.id
GROUP BY  tableb.city, tableb.geom

所以我得到了这个:
| 和值|城市|格姆|
| --------------|--------------|--------------|
| 十四岁|巴黎|多面体(XXX)|
| 四个|巴黎|多面体(XXX)|
| 10个|柏林|多面体(XXX)|
| 六十八|米兰|多面体(XXX)|
| 五十一|伦敦|多面体(XXX)|
| 二|米兰|多面体(XXX)|
但我想要这个
| 总和|城市|格姆|
| --------------|--------------|--------------|
| 十八岁|巴黎|多面体(XXX)|
| 10个|柏林|多面体(XXX)|
| 七十个|米兰|多面体(XXX)|
| 五十一|伦敦|多面体(XXX)|
如何添加城市几何图形,同时仍然具有唯一的城市值并执行SUM?

重要提示:几何体是多多边形

我正在使用PostgreSQL

lyr7nygr

lyr7nygr1#

在不知道数据的情况下,我想这可能会发生,因为每个城市都有多个几何示例,但我也同意弗朗西斯科不使用:

FROM tablea, tableb

这是一个交叉连接,如果你只是想在几何领域连接,我不确定这里是不是有意的。

SELECT
   SUM(tablea.sum)
   , tableb.city
   , tableb.geom
FROM tablea
   JOIN tableb 
      ON tablea.id = tableb.id
GROUP BY
   tableb.city
   , tableb.geom
dxxyhpgq

dxxyhpgq2#

也许你的问题更适合使用INNER JOIN。示例:

SELECT SUM(tablea.sum), tableb.city, tableb.geom
FROM tablea INNER JOIN tableb 
ON tablea.id = tableb.id
xeufq47z

xeufq47z3#

也许有些城市的geom值与其他城市的geom值不同。试试这个看看有什么不同

SELECT SUM(tablea.sum), tableb.city, ST_X(tableb.geom), ST_Y(tableb.geom)
FROM tablea INNER JOIN tableb 
ON tablea.id = tableb.id
GROUP BY tableb.city, ST_X(tableb.geom), ST_Y(tableb.geom)
l2osamch

l2osamch4#

这可确保城市是唯一的,如果每个城市有多个几何体,则只选择一个:

SELECT  tableb.city, SUM(tablea.sum), max(tableb.geom)
FROM tablea
INNER JOIN tableb ON tablea.id = tableb.id
GROUP BY tableb.city

相关问题