열에서 고유 한 값 수를 찾는 SQL


342

다음과 같은 방법으로 열의 모든 고유 값을 선택할 수 있습니다.

  • SELECT DISTINCT column_name FROM table_name;
  • SELECT column_name FROM table_name GROUP BY column_name;

그러나 해당 쿼리에서 행 수를 어떻게 얻습니까? 하위 쿼리가 필요합니까?


1
어떤 버전의 SQL Server를 사용하고 있습니까?
Kevin Fairchild

답변:


614

집계 함수 DISTINCT내 에서 키워드 를 사용할 수 있습니다 COUNT.

SELECT COUNT(DISTINCT column_name) AS some_alias FROM table_name

해당 열의 고유 값만 계산합니다.


7
깔끔한, 나는 당신이 거기에 별개의 키워드를 넣을 수 있다는 것을 몰랐다.
Christian Oudard

13
또한 그룹에서 작동select A,COUNT(DISTINCT B) from table group by A
tmanthey

6
이 예를 확장하여 여러 열을 구별 할 수 있습니까?
eugene

11 년 후, 이것은 여전히 ​​유용합니다
wundermahn

176

이렇게하면 고유 한 열 값과 각 값의 개수가 제공됩니다. 나는 보통 두 가지 정보를 모두 알고 싶어한다.

SELECT [columnName], count([columnName]) AS CountOf
FROM [tableName]
GROUP BY [columnName]

60
을 기준으로 그룹화 columnName하고 있으므로 이미 고유 한 값을 한 번만 받고 있으며 distinct키워드는 여기서 아무 것도하지 않습니다. 그것없이 쿼리를 시도하십시오, 결과 집합은 정확히 동일합니다.
Antti29

26

Count ()는 null 값을 무시하므로 null을 고유 한 값으로 허용해야하는 경우 다음과 같은 까다로운 작업을 수행 할 수 있습니다.

select count(distinct my_col)
       + count(distinct Case when my_col is null then 1 else null end)
from my_table
/

정말 귀하의 경우 문이 말 뜻이라고 생각 :case when my_col is null then 1 else my_col end
제임스 젠슨

명확성을 위해 :SELECT my_col, COUNT(my_col) + COUNT(CASE WHEN my_col IS NULL THEN 1 ELSE NULL END) as CountOf from my_Table GROUP BY my_col
Michael Paulukonis

count (*)는 null을 포함
PragmaticProgrammer

1
@PragmaticProgrammer 그렇게 생각하지만 null 행과 같은 것은 아니며 null 값만 count(*)있으며 특히 행 수입니다.
David Aldridge

20

column_name 고유 값의 SQL 합계는 빈도별로 정렬됩니다.

SELECT column_name, COUNT(*) FROM table_name GROUP BY column_name ORDER BY 2 DESC;

1
확실히 최고의 답변 IMO
Briford Wylie

13
select count(*) from 
(
SELECT distinct column1,column2,column3,column4 FROM abcd
) T

이것은 별개의 열 그룹 수를 제공합니다.


11
SELECT COUNT(DISTINCT column_name) FROM table as column_name_count;

고유 한 열을 세고 별명을 지정해야합니다.


5
select Count(distinct columnName) as columnNameCount from tableName 

0

**

다음 SQL을 사용하여 Oracle 11g에서 고유 한 열 값 수를 얻을 수 있습니다 .

**

Select count(distinct(Column_Name)) from TableName

0
select count(distinct(column_name)) AS columndatacount from table_name where somecondition=true

이 쿼리를 사용하여 서로 다른 데이터를 계산할 수 있습니다. 감사


0

MS SQL Server 2012 이후에는 창 기능도 사용할 수 있습니다.

   SELECT column_name, 
   COUNT(column_name) OVER (Partition by column_name) 
   FROM table_name group by column_name ; 

-8

개수 (distinct ({fieldname}))가 중복 임

간단히 Count ({fieldname})는 해당 테이블의 모든 고유 값을 제공합니다. 그것은 (당신이 많은 가정) 당신에게 테이블의 개수를 제공하지 않을 것입니다 (즉, 테이블의 Count (*)와 같지 않음)


2
아니요, 정확 하지 않습니다 . count(field)행의 수를 반환 field입니다 not null.
Antti29
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.