[SQL] SQL에서, 계수의 차이 (열) 무엇과 COUNT (*)?
SQLSQL에서, 계수의 차이 (열) 무엇과 COUNT (*)?
나는 다음과 같은 쿼리를 가지고 :
select column_name, count(column_name)
from table
group by column_name
having count(column_name) > 1;
나는 (*) 카운트 (COLUMN_NAME)을 계산하는 모든 통화를 대체하는 경우의 차이는 무엇일까요?
이 질문은 내가 오라클의 테이블에서 중복 값을 어떻게 찾을 수 있습니까 영감을했다?
카운트 수 (COLUMN_NAME)를 대체 허용 대답 (어쩌면 내 질문에) 명확하게하려면 (*) 널과 열에 널 (null) 값의 수를 포함하는 결과에 추가 행을 반환합니다.
해결법
-
==============================
1.(*) 카운트 NULL을 카운트 (열)하지 않는 계산
(*) 카운트 NULL을 카운트 (열)하지 않는 계산
[편집] 사람들이 그것을 실행할 수 있도록이 코드를 추가
create table #bla(id int,id2 int) insert #bla values(null,null) insert #bla values(1,null) insert #bla values(null,1) insert #bla values(1,null) insert #bla values(null,1) insert #bla values(1,null) insert #bla values(null,null) select count(*),count(id),count(id2) from #bla
결과 7 (3) (2)
-
==============================
2.또 다른 작은 차이, * 특정 열을 사용하는 사이에, 열 경우에 당신은 키워드 DISTINCT 추가하고, 고유 값의 수를 제한 할 수 있다는 것입니다 :
또 다른 작은 차이, * 특정 열을 사용하는 사이에, 열 경우에 당신은 키워드 DISTINCT 추가하고, 고유 값의 수를 제한 할 수 있다는 것입니다 :
select column_a, count(distinct column_b) from table group by column_a having count(distinct column_b) > 1;
-
==============================
3.또 아마도 미묘한 차이는 일부 데이터베이스 구현에서 카운트 (*)는 당해 테이블보다는 실제 데이터 행의 인덱스를보고 계산된다는 것이다. 특정 컬럼이 지정되지 않기 때문에, (특정 열을 계산하는 경우가있을 것 같은) 실제 행과 그 값을 귀찮게 할 필요가 없습니다. 인덱스 데이터를 사용하여 데이터베이스를 허용하는 것은 상당히 빨리가 "진짜"행을 계산하기보다 수 있습니다.
또 아마도 미묘한 차이는 일부 데이터베이스 구현에서 카운트 (*)는 당해 테이블보다는 실제 데이터 행의 인덱스를보고 계산된다는 것이다. 특정 컬럼이 지정되지 않기 때문에, (특정 열을 계산하는 경우가있을 것 같은) 실제 행과 그 값을 귀찮게 할 필요가 없습니다. 인덱스 데이터를 사용하여 데이터베이스를 허용하는 것은 상당히 빨리가 "진짜"행을 계산하기보다 수 있습니다.
-
==============================
4.워드 프로세서의 설명은, 이것을 설명하는 데 도움이 :
워드 프로세서의 설명은, 이것을 설명하는 데 도움이 :
(*) 카운트가 널 (null)을 포함 그래서, 다른 방법은하지 않습니다.
-
==============================
5.우리는 간단한 쿼리와의 차이를 설명하기 위해 스택 Exchange 데이터 탐색기를 사용할 수 있습니다. 스택 오버플로 데이터베이스의 사용자 테이블은 종종 사용자의 웹 사이트 URL과 같은 빈을 남아있는 열이 있습니다.
우리는 간단한 쿼리와의 차이를 설명하기 위해 스택 Exchange 데이터 탐색기를 사용할 수 있습니다. 스택 오버플로 데이터베이스의 사용자 테이블은 종종 사용자의 웹 사이트 URL과 같은 빈을 남아있는 열이 있습니다.
-- count(column_name) vs. count(*) -- Illustrates the difference between counting a column -- that can hold null values, a 'not null' column, and count(*) select count(WebsiteUrl), count(Id), count(*) from Users
당신은 데이터 탐색기에서 위의 쿼리를 실행하면 (*)가 ID 열이 null 값을 허용하지 않기 때문에 카운트 카운트 (ID)에 대한 동일한 지 확인하고 계산합니다. 해당 열이 null을 허용하기 때문에 WebsiteUrl 수는하지만, 훨씬 낮다.
-
==============================
6.COUNT (COLUMN_NAME)이되지 않는 반면 기본적 COUNT (*)는 기능 테이블의 모든 행을 리턴; 그게 제외 모두가 여기에도 여기에 대답 한 값을 NULL입니다. 그러나 가장 흥미로운 부분은 쿼리를 만드는 것입니다 데이터베이스는 여러 계산이나 복잡한 쿼리보다는 COUNT (COLUMN_NAME)를 수행하지 않는 한이 사용 COUNT (*)에 더 최적화. 데이터의 거대한 숫자를 처리하면서 그렇지 않으면 정말 DB의 성능을 낮출 것이다.
COUNT (COLUMN_NAME)이되지 않는 반면 기본적 COUNT (*)는 기능 테이블의 모든 행을 리턴; 그게 제외 모두가 여기에도 여기에 대답 한 값을 NULL입니다. 그러나 가장 흥미로운 부분은 쿼리를 만드는 것입니다 데이터베이스는 여러 계산이나 복잡한 쿼리보다는 COUNT (COLUMN_NAME)를 수행하지 않는 한이 사용 COUNT (*)에 더 최적화. 데이터의 거대한 숫자를 처리하면서 그렇지 않으면 정말 DB의 성능을 낮출 것이다.
-
==============================
7.테스트 실행의 SQL Server 2008의 다음 코드를 참조하십시오 :
테스트 실행의 SQL Server 2008의 다음 코드를 참조하십시오 :
-- Variable table DECLARE @Table TABLE ( CustomerId int NULL , Name nvarchar(50) NULL ) -- Insert some records for tests INSERT INTO @Table VALUES( NULL, 'Pedro') INSERT INTO @Table VALUES( 1, 'Juan') INSERT INTO @Table VALUES( 2, 'Pablo') INSERT INTO @Table VALUES( 3, 'Marcelo') INSERT INTO @Table VALUES( NULL, 'Leonardo') INSERT INTO @Table VALUES( 4, 'Ignacio') -- Get all the collumns by indicating * SELECT COUNT(*) AS 'AllRowsCount' FROM @Table -- Get only content columns ( exluce NULLs ) SELECT COUNT(CustomerId) AS 'OnlyNotNullCounts' FROM @Table
-
==============================
8.COUNT (*) - 테이블 레코드의 총 수를 반환합니다 (포함하여 NULL이 기록을 평가).
COUNT (*) - 테이블 레코드의 총 수를 반환합니다 (포함하여 NULL이 기록을 평가).
COUNT (열 이름) - 비 NULL 레코드의 총 수를 돌려줍니다. 그것은이 계수 NULL이 특정 열에 기록을 평가 무시 것을 의미한다.
-
==============================
9.그것은 사용하는 것이 가장 좋습니다
그것은 사용하는 것이 가장 좋습니다
Count(1) in place of column name or *
이 존재 여부를 테이블에 열 이름을 확인하기 위해 가지 않을 때문에 빨리 모든 형식보다, 테이블의 행의 수를 계산하는
-
==============================
10.당신은 당신이 얼마나 많은 열이 계산하는 데 필요한 것을 지정하는 것보다 하나 이상의 열을 사용하려는 경우 하나 개의 컬럼이 테이블에 수정 인 경우에는 차이가 없습니다 ......
당신은 당신이 얼마나 많은 열이 계산하는 데 필요한 것을 지정하는 것보다 하나 이상의 열을 사용하려는 경우 하나 개의 컬럼이 테이블에 수정 인 경우에는 차이가 없습니다 ......
감사,
-
==============================
11.이전 답변에서 언급 한 바와 같이, 수 (COLUMNNAME) 카운트 반면 열 값이있는 경우에만, (*) 카운트도 NULL 열을 계산합니다.
이전 답변에서 언급 한 바와 같이, 수 (COLUMNNAME) 카운트 반면 열 값이있는 경우에만, (*) 카운트도 NULL 열을 계산합니다.
그것은 항상 피하기 *에 가장 좋은 방법입니다 (선택 * 계산 *, ...)
from https://stackoverflow.com/questions/59294/in-sql-whats-the-difference-between-countcolumn-and-count by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 쿼리 "NOT IN"MySQL은 (0) | 2020.03.20 |
---|---|
[SQL] 어떻게 MySQL을 순차적 번호 격차를 찾는 방법은? (0) | 2020.03.20 |
[SQL] .NET에서 Math.Max 같은 두 값을 사용합니다 SQL Server의 최대 기능이 있습니까? (0) | 2020.03.20 |
[SQL] 무엇 TRUNCATE의 차이점은 그리고 SQL에서 DELETE (0) | 2020.03.20 |
[SQL] SQL 서버 : 어떻게 첫 번째 행에 가입하세요 (0) | 2020.03.20 |