对唯一行值进行分组 Postgis、postgres 和 Qgis

Posted

技术标签:

【中文标题】对唯一行值进行分组 Postgis、postgres 和 Qgis【英文标题】:Grouping Unique Row values Postgis, postgres and Qgis 【发布时间】:2016-02-09 05:55:06 【问题描述】:

我被赋予了对行进行分组的任务,到目前为止,我使用 group by 的 sql 语句失败了,我还尝试过先由组唯一地提取数据,然后执行内部连接,但它不起作用。我已经使用了 select distinct 和唯一的方法来创建一个只有 V 的列作为分组我必须使用 substr() 但没有理想的如何通过只取第一个来避免所有其他 geom 值下面是一个例子我的空间数据:

id,groupname,lat/long
1,  v1 , (40,70)
2,  v2 , (40,75)
3,  v1 ,  (40,74)

基本上我的目标是将所有 V 组合成一行

id,groupname,lat/long
 1,v        ,(40,70) 

其中 40,70 表示从代表组的第一行中检测到的第一个值。

请注意,sql 查询将在 postgres SQL 中运行。在 QGis 中采取进一步措施或使用 postgis 的任何建议也很好。提前致谢 。

【问题讨论】:

mysql和ms sql是postgresql的不同产品,下次请只使用相关的产品标签,不要随便有sql这个词! 哦,好的,谢谢您的提示!我只是用了建议 请不要责怪 SO 中的某个功能没有正确检查哪些标签与您的问题相关! 【参考方案1】:

如果您的第一行是指组中具有最小 id 的行,则使用子查询获取每个组的 min(id) 并将您的表加入其中以获得 dpatial 值:

select tminid, t.gname, t2.latlong
from (select min(id) as minid, substring(groupname,1,1) as gname
      from table
      group by substring(groupname,1,1)) t
inner join table t2 on t.minid=t2.id and t.gname=substring(t2.groupname,1,1)

【讨论】:

好吧,我试试看。如果我有多行不同的组名但输出相同怎么办。像 b1,2,3 到 b。在同一个表中。这个方法也适用吗? 只要你能用它们的第一个字符区分它们,是的,这种方法确实适用。所以,如果你有一个组名 a1 和 ab1,那么你必须改变分组逻辑。

以上是关于对唯一行值进行分组 Postgis、postgres 和 Qgis的主要内容,如果未能解决你的问题,请参考以下文章

在 xsl:fo 表中按列行值分组

Ubuntu下postgre与postgis安装

在 Python 3 上使用 PostGIS

如何用R将列中相同值的行值分组? [复制]

在 Postgres 中对事件进行分组

postgis经常使用函数介绍