SQL列表只有唯一/不同的值

时间:2016-03-05 07:10:01

标签: sql postgresql postgis

我有一个包含几何线(方式)的表。有一些具有独特几何(不重复)的线和具有相同几何(2,3,4和更多)的线。我想列出唯一的。例如,如果有两条具有相同几何形状的线,我想放下它们。我尝试了DISTINCT,但它也显示了重复行的第一个结果。我只想看到独特的。 我尝试了窗口功能,但我得到了类似的结果(我在复制的第一行得到了一个计数器)。抱歉新手问题,但我正在学习:)谢谢!

示例:

way|
1  |
1  |
2  |
3  |
3  |
4  |

结果应该是:

way|
2  |
4  |

实际上有效。非常感谢。我在这个表中还有其他标签用于每种方式(名称,参考和其他一些标签)当我将它们添加到查询中时,我放松了隔离。

select count(way), way, name 
from planet_osm_line 
group by way, name 
having count(way) = 1;

在查询中没有“name”我会列出所有唯一值,但我想为每一行保留“name”。在这个例子中,我仍然可以获得列表中的所有行。

4 个答案:

答案 0 :(得分:4)

阐述@Nithila回答:

select count(way), way
from your_table
group by way
having count(way) = 1;

答案 1 :(得分:2)

你可以通过分组方式,在取出数据时检查count = 1.它会给出非重复数据。

答案 2 :(得分:2)

首先计算所需的行,然后搜索其余字段。所以聚合不会给你带来麻烦。

WITH singleRow as ( 
   select count(way), way
   from planet_osm_line 
   group by way
   having count(way) = 1
)
SELECT P.*
FROM planet_osm_line P
JOIN singleRow S
  ON P.way = S.way

答案 3 :(得分:1)

@voyteck 正如我理解你的问题,你需要只获得非重复记录的方式列,并且每行需要显示名称

如果是这样,您必须将所有列放在select语句中,但不需要按所有列进行分组。 选择计数(方式),方式,名称 来自planet_osm_line 分组 有计数(路)= 1;