SQL 쿼리에서 DISTINCT를 사용하여 모든 열 검색
SQL의 DISTINCT
키워드는 지정된 열을 기반으로 중복 행을 제거합니다. 그러나 모든 열을 가져오면서 열 하위 집합의 고유한 값만 표시하려면 신중하게 고려해야 합니다. 단순히 SELECT DISTINCT *
을 사용하는 것은 모든 데이터베이스 시스템에서 안정적으로 지원되지 않습니다.
DISTINCT를 사용한 전체 열 검색을 위한 솔루션
이를 달성하는 방법은 특정 데이터베이스 시스템에 따라 여러 가지가 있습니다.
ROW_NUMBER()
창 함수를 사용하여 솔루션을 제공합니다.<code class="language-sql">SELECT * FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY field1 ORDER BY field2) AS row_number FROM table ) AS rows WHERE row_number = 1;</code>
field1
순으로 정렬된 각 파티션(field2
으로 정의됨) 내에 고유한 행 번호를 할당합니다. 그런 다음 외부 쿼리는 각 파티션의 첫 번째 행만 선택합니다. field1
및 field2
을 적절한 열로 바꾸세요.
GROUP BY
절은 작동할 수 있지만 그룹화된 열의 각 개별 조합에 대해 다른 모든 열이 동일한 값을 갖도록 보장할 수 있는 경우에만 가능합니다. 이는 사실이 아닌 경우가 많으며 예측할 수 없는 결과를 초래할 수 있습니다.<code class="language-sql">SELECT * FROM table GROUP BY field1;</code>
DISTINCT ON
절을 제공합니다.<code class="language-sql">SELECT DISTINCT ON (field1) * FROM table;</code>
field1
의 각 고유 값에 대해 첫 번째 행만 선택합니다.
<code class="language-sql">SELECT * FROM table AS t1 INNER JOIN table AS t2 ON t1.field1 = t2.field1 INNER JOIN (SELECT field1, MIN(field2) AS min_field2 FROM table GROUP BY field1) AS distinct_fields ON t1.field1 = distinct_fields.field1 AND t1.field2 = distinct_fields.min_field2;</code>
각 개별 field2
에 대한 field1
의 최소값을 찾아 원래 테이블에 다시 조인합니다. 원하는 동작에 따라 MIN()
기능을 조정해야 할 수도 있습니다.
"table"
, "field1"
및 "field2"
를 실제 테이블 및 열 이름으로 바꿔야 합니다. 가장 좋은 접근 방식은 특정 데이터베이스 시스템과 여러 행이 지정된 열에 동일한 고유 값을 가질 때 원하는 동작에 따라 다릅니다.
위 내용은 DISTINCT를 사용하여 SQL 쿼리의 모든 열을 검색하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!