SQLShack (한국어)

이 기사에서는 제거를위한 SQL Count Distinct 연산자를 살펴 봅니다. 결과 집합의 중복 행.

개발자는 여러 조건이있는 SQL 테이블에서 데이터를 가져와야합니다. 때로는 테이블의 모든 행을 가져 오지만 사용 가능한 NULL 값을 제거하려고합니다. 작년에 주문한 고유 한 고객 레코드를 얻고 자한다고 가정합니다.

SQL Count 함수에 대해 간단히 살펴 보겠습니다.

SQL Count 함수

SQL Count 집계 함수를 사용하여 행 수를 가져옵니다. 출력. 회사에서 판매하는 모든 제품에 대한 레코드를 보유하는 제품 테이블이 있다고 가정합니다. 지난 분기에 판매 된 제품 수를 알고 싶습니다. SQL Count 함수를 사용하여 지정된 조건의 행 수를 반환 할 수 있습니다.

SQL COUNT 함수의 구문 :
COUNT (expression);

기본적으로, SQL Server Count 함수는 All 키워드를 사용합니다. 이는 SQL Server가 테이블의 모든 레코드를 계산 함을 의미합니다. 또한 중복 값이있는 행도 포함됩니다.

샘플 테이블을 만들고 그 안에 레코드를 몇 개 삽입 해 보겠습니다.

이 테이블에는 중복 값과 NULL 값도 있습니다. .

다음 스크린 샷에서 확인할 수 있습니다.

  • Count (* ) 중복 값과 NULL 값 포함
  • 개수 (Col1)에는 중복 값이 포함되지만 NULL 값은 포함되지 않습니다.

테이블에서 사용할 수있는 고유 한 값을 알고 싶다고 가정합니다. 이를 위해 SQL COUNT DISTINCT를 사용할 수 있습니다.

1
2

## TestTable에서 count (DISTINCT COL1)
선택

다음 출력에서는 2 개의 행만 얻습니다. SQL COUNT Distinct는 결과 집합에서 중복 및 NULL 값을 제거하지 않습니다.

다른 예를 살펴 보겠습니다. 이 예에는 City와 State 두 개의 열로 구성된 위치 테이블이 있습니다.

이제 다음 쿼리를 실행하여 테이블에서 고유 한 도시의 개수를 찾습니다.

1
2

SELECT COUNT (DISTINCT (City))
FROM Location;

고유 한 도시 수 2 (구르 가온 및 Jaipur)를 검색합니다.

데이터를 보면 유사한 도시 이름이 다른 상태도. 도시와주의 조합은 고유하며, 출력에서 고유 한 조합이 제거되는 것을 원하지 않습니다.

열 조합에서도 SQL DISTINCT 함수를 사용할 수 있습니다. 값의 조합을 확인하고 조합이 고유하지 않은 경우 제거합니다.

1
2

위치에서 DISTINCT 도시, 주 선택
위치;

출력에서 중복 된 도시 이름을 제거하지 않습니다. 값의 고유 한 조합 때문입니다.

위치 테이블에 행을 하나 더 삽입하겠습니다.

1

위치 값에 삽입 ( “Gurgaon “,”Haryana “)

위치 테이블. 데이터에서 고유하지 않은 도시와 주 조합이 하나 있음을 알 수 있습니다.

SELECT DISTINCT를 다시 실행합니다. 함수이며 이번에는 4 개의 행만 반환해야합니다.

여러 열에 직접 SQL COUNT DISTINCT 함수를 사용할 수 없습니다. . 다음과 같은 오류 메시지가 표시됩니다.

임시 테이블을 사용하여 SQL DISTINCT 함수에서 레코드를 가져온 다음 사용할 수 있습니다. count (*)는 행 개수를 확인합니다.

1
2
3
4

SELECT DISTINCT City, State
into #Temp
FROM Location;
#Temp에서 count (*) 선택

출력에서 행 개수 4를 얻습니다.

구별하기 위해 열 조합을 사용하는 경우 값과 모든 열에 NULL 값이 포함되어 있으면 SQL Server의 고유 한 조합이됩니다.

이를 확인하기 위해 위치 테이블에 더 많은 레코드를 삽입 해 보겠습니다. 이 쿼리에 주를 지정하지 않았습니다.

1
2

위치 값에 삽입 ( “Gurgaon”, “”)
location (city) values ( “Gurgaon”)에 삽입

위치 테이블 데이터를 살펴 보겠습니다.

구별되도록 쿼리를 다시 실행하십시오. 위치 테이블의 행.

1
2

지역별시 /도 선택
위치;

출력에서 제거되지 않음을 알 수 있습니다. 공백 또는 NULL 값이있는 City 및 State의 조합.

마찬가지로 SQL COUNT가있는 행 개수 6을 볼 수 있습니다. DISTINCT 함수.

SELECT COUNT, COUNT (*) 및 SQL COUNT의 차이점

COUNT

Count (*)

Count (Distinct)

where 절에 지정된 조건을 충족 한 후 총 행 수를 반환합니다.

where 절에서 지정한 조건을 만족 한 후 총 행 수를 반환합니다.

where 절에서 지정한 조건을 만족 한 후 고유 한 수의 행을 반환합니다. .

행 수를 제공합니다. 중복 값을 제거하지 않습니다.

중복 NULL 값에 관계없이 모든 행을 고려합니다.

NULL 및 중복 값을 제거한 후 고유 한 행 수

출력에서 NULL 값을 제거합니다.

출력에서 NULL 값을 제거하지 않습니다.

출력에서 NULL 값을 제거합니다.

SQL Count 고유 함수의 실행 계획

SQL COUNT DISTINCT 함수의 실제 실행 계획을 살펴 보겠습니다. 아래와 같이 SSMS 메뉴 표시 줄에서 실제 실행 계획을 활성화해야합니다.

실제 값을 가져 오려면 쿼리를 실행하십시오. 실행 계획. 이 실행 계획에서 다음과 같은 상위 리소스 소비 연산자를 확인할 수 있습니다.

  • 정렬 (고유 정렬) – 비용 78 %
  • 테이블 스캔 – 비용 22 %

정렬 연산자 위로 마우스를 가져 가면 연산자 세부 정보가 포함 된 도구 설명이 열립니다.

또한 속성 창에서 메모리 할당, 통계 및 행 수를 포함하여 정렬 연산자에 대한 자세한 정보를 얻을 수 있습니다.

백만 개의 레코드가있는 테이블에서 고유 카운트 연산자는 비용이 많이 드는 연산자이므로 SQL Count Distinct는 성능 문제를 일으킬 수 있습니다. 실제 실행 계획.

SQL Server 2019는 새로운 Approx_count_distinct 함수를 사용하여 SQL COUNT DISTINCT 연산자의 성능을 향상시킵니다. SQL Server 2019의이 새로운 기능은 대략적인 고유 행 수를 제공합니다. SQL Count distinct 및 Approx_Count_distinct 함수 출력에 약간의 차이가있을 수 있습니다.

SQL COUNT DISTINCT를 키워드 Approx_Count_distinct로 대체하여 SQL Server 2019에서이 함수를 사용할 수 있습니다.

1
2

SELECT APPROX_COUNT_DISTINCT (도시)
위치에서;

새로운 SQL Server 2019 함수 인 Approx_Count_Distinct에서이 함수에 대해 자세히 알아볼 수 있습니다.

결론

이 기사에서는 다양한 예제를 통해 SQL COUNT 함수를 살펴 보았습니다. 또한 SQL Server 2019에서 사용할 수있는 새로운 SQL 함수 인 Approx_Count_distinct도 다루었습니다. 환경에 따라 검토하는 것이 좋습니다. 의견이나 질문이 있으시면 아래 의견에 남겨주세요.

  • 작성자
  • 최근 게시물
인도 구르 가온에서 MCSA 인증 및 Microsoft 인증 트레이너로서 13 년의 경력을 보유한 Rajendra는 성능 최적화, 모니터링, 고 가용성에 중점을 둔 다양한 대기업에서 근무합니다. , 재해 복구 전략 및 구현. 그는 SQL Server, Azure, MySQL, Linux, Power BI, 성능 조정, AWS / Amazon RDS, Git 및 현재까지 1,000 만 명이 넘는 독자가 시청 한 관련 기술에 대한 수백 개의 권위있는 기사의 저자입니다.
그는 SQL Server Always On 가용성 그룹에 대한 50 부작 시리즈를 통해 단일 주제에 대한 가장 큰 무료 온라인 기사 모음 중 하나를 작성했습니다. SQL Server 커뮤니티에 대한 공헌을 바탕으로 2020 년과 2021 년 SQLShack에서 지속적으로 권위있는 “올해의 최우수 저자”를 비롯한 다양한 상을 수상했습니다.
Raj는 항상 새로운 도전에 관심이 있으므로 컨설팅이 필요한 경우 그의 글에서 다루는 주제에 대한 도움은 [email protected]으로 연락 할 수 있습니다.
Rajendra Gupta의 모든 게시물보기

Rajendra Gupta의 최신 게시물 (전체보기)
  • SQL Server Always On 가용성의 세션 시간 초과 그룹-2021 년 2 월 8 일
  • AWS RDS SQL Server에 대한 마이너 및 메이저 버전 업그레이드 수행-2021 년 1 월 29 일
  • AWS RDS PostgreSQL 인스턴스 배포-2021 년 1 월 27 일

Write a Comment

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다