错误:“group”

时间:2016-03-23 13:52:08

标签: postgresql postgis

你好我正在写一个sql查询但是我在GROUP BY的行上遇到语法错误。可能是什么问题,如果可以请帮助。

UPDATE intersection_points i
  SET nbr_victimes = sum(tue+bl+bg)
    FROM accident_ma a ,intersection_points i 
    WHERE (ST_DWithin(i.st_intersection,a.geom_acc, 10000) group by st_intersection)) ;

2 个答案:

答案 0 :(得分:1)

GROUP BY是它自己的子句,它不是WHERE子句的一部分。

这就是你所拥有的:

WHERE (
    ST_DWithin(i.st_intersection,a.geom_acc, 10000)
    group by st_intersection
)

这就是你需要的:

WHERE ST_DWithin(i.st_intersection,a.geom_acc, 10000)
group by st_intersection

修改:在回复评论时,听起来JOINUPDATE ... FROM语法需要的要复杂一些。请查看“备注”部分on this page

  

当存在FROM子句时,实质上发生的是目标表连接到from_list中提到的表,并且连接的每个输出行表示目标表的更新操作。使用FROM时,应确保连接为每个要修改的行生成最多一个输出行。换句话说,目标行不应该连接到其他表的多个行。如果是,那么只有一个连接行将用于更新目标行,但是将使用哪一个不容易预测。
  
  由于这种不确定性,仅在子选择内引用其他表更安全,但通常比使用连接更难阅读和更慢。

通常这会涉及将语法更改为:

UDPATE SomeTable
SET SomeColumn = 'Some Value'
WHERE AnotherColumn = 
  (SELECT AnotherColumn
   FROM AnotherTable
   -- etc.)

然而,在此查询中使用ST_DWithin()可能会使这一点复杂化。如果没有对此更新的表结构,关系和总体意图有更深入的了解,我可能没有更多的帮助。基本上,您需要为数据库确切地说明需要更新哪些记录以及如何更新它们,这可能涉及以某种方式将查询更改为后一种子选择语法。

答案 1 :(得分:0)

我不喜欢'了解您的数据结构。我从您的查询中创建以下表。请检查表结构。

enter image description here

如果表格的结构是

您的查询必须

UPDATE intersection_points SET nbr_victimes = (SELECT SUM(a.tue+a.bl+a.bg) FROM accident_ma a WHERE st_dwithin(st_intersection, a.geom_acc, 1000));