> 데이터 베이스 > MySQL 튜토리얼 > DISTINCT를 사용하여 SQL 쿼리의 모든 열을 검색하려면 어떻게 해야 합니까?

DISTINCT를 사용하여 SQL 쿼리의 모든 열을 검색하려면 어떻게 해야 합니까?

Patricia Arquette
풀어 주다: 2025-01-18 20:44:12
원래의
508명이 탐색했습니다.

How Can I Retrieve All Columns in a SQL Query Using DISTINCT?

SQL 쿼리에서 DISTINCT를 사용하여 모든 열 검색

SQL의 DISTINCT 키워드는 지정된 열을 기반으로 중복 행을 제거합니다. 그러나 모든 열을 가져오면서 열 하위 집합의 고유한 값만 표시하려면 신중하게 고려해야 합니다. 단순히 SELECT DISTINCT *을 사용하는 것은 모든 데이터베이스 시스템에서 안정적으로 지원되지 않습니다.

DISTINCT를 사용한 전체 열 검색을 위한 솔루션

이를 달성하는 방법은 특정 데이터베이스 시스템에 따라 여러 가지가 있습니다.

  • MySQL의 ROW_NUMBER() 함수: MySQL은 하위 쿼리 내에서 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으로 정의됨) 내에 고유한 행 번호를 할당합니다. 그런 다음 외부 쿼리는 각 파티션의 첫 번째 행만 선택합니다. field1field2을 적절한 열로 바꾸세요.

  • GROUP BY 절(제한된 적용 가능성): GROUP BY 절은 작동할 수 있지만 그룹화된 열의 각 개별 조합에 대해 다른 모든 열이 동일한 값을 갖도록 보장할 수 있는 경우에만 가능합니다. 이는 사실이 아닌 경우가 많으며 예측할 수 없는 결과를 초래할 수 있습니다.
<code class="language-sql">SELECT *
FROM table
GROUP BY field1;</code>
로그인 후 복사
  • DISTINCT ON(PostgreSQL, Oracle): PostgreSQL과 Oracle은 보다 직접적인 솔루션인 DISTINCT ON 절을 제공합니다.
<code class="language-sql">SELECT DISTINCT ON (field1) *
FROM table;</code>
로그인 후 복사

field1의 각 고유 값에 대해 첫 번째 행만 선택합니다.

  • 조인된 하위 쿼리(MySQL, SQLite 등): 창 기능이 없는 데이터베이스의 경우 하위 쿼리를 사용한 자체 조인을 사용할 수 있습니다(이 방법은 덜 효율적입니다).
<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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿