속성 테이블 (또는 레이어)의 단일 열에서 고유 한 값을 선택하십시오.


16

ArcMap의 열에서 고유 한 값을 선택하는 방법이 있습니까? GDB 및 SHP 형식의 데이터가 있습니다. SQL, QueryLayers, ModelBuilder 및 개별 도구 상자를 사용하여 선택하는 방법을 검색했으며 모든 선택 옵션이 항상 SELECT * FROM tableName WHERE ...

SQL에서는 SELECT DISTINCT columnName FROM tableName을 작성합니다.

답변:


17

또는 ArcToolBox 도구 빈도 (Analysis Tools >> Statistics >> Frequency)를 실행하여 고유 한 값과 표시되는 횟수를 가진 테이블을 출력 할 수 있습니다.

또는 필드에 SearchCursor를 가져온 파이썬 스크립트를 작성한 다음 양식의 모든 값 목록을 작성할 수 있습니다.

if value not in myList:
    myList.append(value)

3
ArcInfo 라이센스가없는 경우이 도구 상자를 사용하십시오 (shapefile에서만 테스트 됨) resources.arcgis.com/gallery/file/geoprocessing/…

3
아주 간단한 Python 코드 / 모듈을 사용하여 ArcInfo 함수가 필요했던 함수가 몇 개나되는지 놀랍습니다. 대단해!
RyanKDalton-OffTheGridMaps

고마워 댄, 그 트릭을했다. 라이센스가 빈도 도구 상자를 지원하지 않았습니다.
Steve

12

파이썬리스트 이해를 사용하십시오.

import arcpy
fldName = 'val_fld'
fcName = 'feature_class.shp'
#set creates a unique value iterator from the value field
myList = set([row.getValue(fldName) for row in arcpy.SearchCursor(fcName)]) 

큰 데이터 세트의 경우 메모리 효율적인 방법은 생성기 표현식 을 사용하는 것 입니다.

myList = set((row.getValue(fldName) for row in arcpy.SearchCursor(fcName,fields=fldName))

1
한 분야에만 관심이 있기 때문에 성능 향상을 위해 선택적 fields인수를 지정합니다.myList = set([row.getValue(fldName) for row in arcpy.SearchCursor(fcName, fields=fldName)])
blah238

좋은 생각. 성능 차이를 테스트하는 것이 궁금합니다. SDE 데이터 소스의 경우 중요 할 수 있지만 shapefile 및 파일 지오 데이터베이스의 경우 매우 유용 할 것입니다.
tharen

대단하다. 나는 이것을 멋지게 보여주는 링크를 가지고 있었지만 언젠가 깨졌습니다. 희망이 좋은 오랫동안 이것을 가지고 있기를 바랍니다.
Justin

4

데이터가 PGDB 형식 인 경우 하위 쿼리를 사용하여 쿼리 작성기 대화 상자 (정의 쿼리, 특성 별 선택, 도구 상자 식 등) 내에서 다음을 수행 할 수 있습니다.

SELECT * FROM tableName WHERE ...

column_to_test_for_unique_values IN 
(SELECT column_to_test_for_unique_values
FROM table_name
GROUP BY column_to_test_for_unique_values HAVING
Count(column_to_test_for_unique_values)=1)

column_to_test_for_unique_values의 값이 고유 한 레코드를 리턴합니다.


1
개인 지오 데이터베이스를 통해 DISTINCT를 사용할 수도 있습니다.
Jakub Sisak GeoGraphics


1

데이터가 SDE (공간 데이터베이스 엔진)에있는 경우 Python 및 Arcpy의 ArcSDESQLExecute 오브젝트를 사용할 수 있습니다. 이 "방법"을 사용하여 복잡한 SQL을 전달할 수 있습니다.

# set up executor for sql
executor = arcpy.ArcSDESQLExecute(sde_connection_sql)

# sql statements
select_max = """select max(LOAD_ID) from SDE.FEATURE_CLASS"""

# get load id
result_max_id = executor.execute(select_max)

0

또는 Python 스크립트를 사용하여 CSV로 내 보낸 다음 다른 데이터베이스 (예 : SpatiaLite)의 Python API를 사용하여 csv를 읽고 동일한 스크립트 내에서 적절한 SQL 쿼리를 수행하십시오. 큰 테이블의 경우이 목록 작성기-dunno를 롤링하는 것보다 약간 빠를 있습니다.

그러나 여러분은 그렇게합니다. 이것은 여전히 ​​ArcGIS의 정말 귀찮은 "기능"입니다.


0

distinct하위 쿼리에서 를 사용하는 것은 어떻습니까 (다음은 FGDB 기능 클래스에 있음).

"STATE_NAME" = (select distinct "STATE_NAME" from EsriUsaCountiesDetailed)

로부터 참고 도움 이 한계가 있음 (10.0) :

적용 범위, 모양 파일 및 기타 비지오 데이터베이스 파일 기반 데이터 소스는 하위 쿼리를 지원하지 않습니다.


2
"DISTINCT"는 File GDB가 아닌 Personal GDB에서만 작동합니다.
Jakub Sisak GeoGraphics

0

저스틴이 제안한대로. 나는 일반적으로 원하는 필드에 대한 요약을 한 다음 dbf에서 select distinct를 수행하여 각각의 고유 값을 분류하고 원래 값으로 다시 결합합니다.
그것은 먼 길이며, 당신은 당신이 선호하는 교정 방법으로 fenagel해야합니다. 하지만 ...
일을 끝내는 것은 뭐든지

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.