게시물:하나의 열에 대해서만 구별됨
pgsql에 이름이 있는 테이블이 있습니다(1 mio 이상).행), 하지만 중복되는 항목도 많습니다.3개의 필드를 선택합니다.id,name,metadata.
저는 그것들을 무작위로 선택하고 싶습니다.ORDER BY RANDOM()그리고.LIMIT 1000그래서 나는 이것을 내 PHP 스크립트에 메모리를 저장하기 위해 많은 단계를 거칩니다.
그런데 어떻게 하면 중복되는 이름이 없는 목록만 제공할 수 있을까요?
예를들면[1,"Michael Fox","2003-03-03,34,M,4545"]반환되지만 반환되지 않음[2,"Michael Fox","1989-02-23,M,5633"]이름 필드는 가장 중요하며 선택할 때마다 목록에서 고유해야 하며 임의여야 합니다.
로 시도했습니다.GROUP BY name하지만 그것은 내가 ID와 메타데이터를 가질 것을 기대합니다.GROUP BY집계 함수에서도 마찬가지입니다. 하지만 어떻게든 필터링하고 싶지 않습니다.
많은 열을 가져오는 방법을 알고 있지만 하나의 열에서만 구별할 수 있는 방법을 아는 사람?
하나의 열(또는 n개의 열)에서만 구별하기
select distinct on (name)
name, col1, col2
from names
이름이 포함된 행을 반환합니다.반환할 행을 제어하려면 주문해야 합니다.
select distinct on (name)
name, col1, col2
from names
order by name, col1
col1로 주문하면 첫 번째 행을 반환합니다.
SELECT DISTINCT ON(표현식 [, ...])은 지정된 표현식이 동일하다고 평가되는 각 행 집합의 첫 번째 행만 유지합니다.DISTINCT ON 표현식은 ORDER BY와 동일한 규칙을 사용하여 해석됩니다(위 참조).원하는 행이 먼저 나타나도록 ORDER BY를 사용하지 않는 한 각 집합의 "첫 번째 행"을 예측할 수 없습니다.
DISTINCT ON 식은 가장 왼쪽에 있는 식과 일치해야 합니다.ORDER BY 절에는 일반적으로 각 DISTINCT ON 그룹 내에서 원하는 행의 우선 순위를 결정하는 추가 식이 포함됩니다.
많은 열을 가져오는 방법을 알고 있지만 하나의 열에서만 구별할 수 있는 방법을 아는 사람?
당신은 샘플 데이터나 완전한 쿼리를 제공하지 않았기 때문에 나는 당신에게 보여줄 것이 없습니다.당신은 다음과 같은 것을 쓰고 싶습니다.
SELECT DISTINCT ON (name) fields, id, name, metadata FROM the_table;
이렇게 하면 예측할 수 없는 행 집합("임의"는 아님)이 반환됩니다.예측 가능하게 하려면 다음을 추가합니다.ORDER BY클로달도의 대답에 따라.만약 당신이 그것을 정말 무작위로 만들고 싶다면, 당신은 그것을 원할 것입니다.ORDER BY random().
n개 열에 대해 구별하는 방법
select distinct on (col1, col2) col1, col2, col3, col4 from names
SELECT NAME,MAX(ID) as ID,MAX(METADATA) as METADATA
from SOMETABLE
GROUP BY NAME
언급URL : https://stackoverflow.com/questions/16913969/postgres-distinct-but-only-for-one-column
'programing' 카테고리의 다른 글
| 유효성 검사 이유입력(거짓)이 작동하지 않습니까? (0) | 2023.05.10 |
|---|---|
| ID 일회용 인터페이스의 올바른 사용 (0) | 2023.05.10 |
| PowerShell에서 "&&" 또는 "-and" 작업을 수행할 수 있습니까? (0) | 2023.05.05 |
| Excel 두 열을 비교하고 중복 항목을 강조 표시합니다. (0) | 2023.05.05 |
| xcode 응용 프로그램의 .app 파일을 가져오는 방법 (0) | 2023.05.05 |