복붙노트

[SQL] SQL에서, 계수의 차이 (열) 무엇과 COUNT (*)?

SQL

SQL에서, 계수의 차이 (열) 무엇과 COUNT (*)?

나는 다음과 같은 쿼리를 가지고 :

select column_name, count(column_name)
from table
group by column_name
having count(column_name) > 1;

나는 (*) 카운트 (COLUMN_NAME)을 계산하는 모든 통화를 대체하는 경우의 차이는 무엇일까요?

이 질문은 내가 오라클의 테이블에서 중복 값을 어떻게 찾을 수 있습니까 영감을했다?

카운트 수 (COLUMN_NAME)를 대체 허용 대답 (어쩌면 내 질문에) 명확하게하려면 (*) 널과 열에 널 (null) 값의 수를 포함하는 결과에 추가 행을 반환합니다.

해결법

  1. ==============================

    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. ==============================

    2.또 다른 작은 차이, * 특정 열을 사용하는 사이에, 열 경우에 당신은 키워드 DISTINCT 추가하고, 고유 값의 수를 제한 할 수 있다는 것입니다 :

    또 다른 작은 차이, * 특정 열을 사용하는 사이에, 열 경우에 당신은 키워드 DISTINCT 추가하고, 고유 값의 수를 제한 할 수 있다는 것입니다 :

    select column_a, count(distinct column_b)
    from table
    group by column_a
    having count(distinct column_b) > 1;
    
  3. ==============================

    3.또 아마도 미묘한 차이는 일부 데이터베이스 구현에서 카운트 (*)는 당해 테이블보다는 실제 데이터 행의 인덱스를보고 계산된다는 것이다. 특정 컬럼이 지정되지 않기 때문에, (특정 열을 계산하는 경우가있을 것 같은) 실제 행과 그 값을 귀찮게 할 필요가 없습니다. 인덱스 데이터를 사용하여 데이터베이스를 허용하는 것은 상당히 빨리가 "진짜"행을 계산하기보다 수 있습니다.

    또 아마도 미묘한 차이는 일부 데이터베이스 구현에서 카운트 (*)는 당해 테이블보다는 실제 데이터 행의 인덱스를보고 계산된다는 것이다. 특정 컬럼이 지정되지 않기 때문에, (특정 열을 계산하는 경우가있을 것 같은) 실제 행과 그 값을 귀찮게 할 필요가 없습니다. 인덱스 데이터를 사용하여 데이터베이스를 허용하는 것은 상당히 빨리가 "진짜"행을 계산하기보다 수 있습니다.

  4. ==============================

    4.워드 프로세서의 설명은, 이것을 설명하는 데 도움이 :

    워드 프로세서의 설명은, 이것을 설명하는 데 도움이 :

    (*) 카운트가 널 (null)을 포함 그래서, 다른 방법은하지 않습니다.

  5. ==============================

    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. ==============================

    6.COUNT (COLUMN_NAME)이되지 않는 반면 기본적 COUNT (*)는 기능 테이블의 모든 행을 리턴; 그게 제외 모두가 여기에도 여기에 대답 한 값을 NULL입니다. 그러나 가장 흥미로운 부분은 쿼리를 만드는 것입니다 데이터베이스는 여러 계산이나 복잡한 쿼리보다는 COUNT (COLUMN_NAME)를 수행하지 않는 한이 사용 COUNT (*)에 더 최적화. 데이터의 거대한 숫자를 처리하면서 그렇지 않으면 정말 DB의 성능을 낮출 것이다.

    COUNT (COLUMN_NAME)이되지 않는 반면 기본적 COUNT (*)는 기능 테이블의 모든 행을 리턴; 그게 제외 모두가 여기에도 여기에 대답 한 값을 NULL입니다. 그러나 가장 흥미로운 부분은 쿼리를 만드는 것입니다 데이터베이스는 여러 계산이나 복잡한 쿼리보다는 COUNT (COLUMN_NAME)를 수행하지 않는 한이 사용 COUNT (*)에 더 최적화. 데이터의 거대한 숫자를 처리하면서 그렇지 않으면 정말 DB의 성능을 낮출 것이다.

  7. ==============================

    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. ==============================

    8.COUNT (*) - 테이블 레코드의 총 수를 반환합니다 (포함하여 NULL이 기록을 평가).

    COUNT (*) - 테이블 레코드의 총 수를 반환합니다 (포함하여 NULL이 기록을 평가).

    COUNT (열 이름) - 비 NULL 레코드의 총 수를 돌려줍니다. 그것은이 계수 NULL이 특정 열에 기록을 평가 무시 것을 의미한다.

  9. ==============================

    9.그것은 사용하는 것이 가장 좋습니다

    그것은 사용하는 것이 가장 좋습니다

    Count(1) in place of column name or * 
    

    이 존재 여부를 테이블에 열 이름을 확인하기 위해 가지 않을 때문에 빨리 모든 형식보다, 테이블의 행의 수를 계산하는

  10. ==============================

    10.당신은 당신이 얼마나 많은 열이 계산하는 데 필요한 것을 지정하는 것보다 하나 이상의 열을 사용하려는 경우 하나 개의 컬럼이 테이블에 수정 인 경우에는 차이가 없습니다 ......

    당신은 당신이 얼마나 많은 열이 계산하는 데 필요한 것을 지정하는 것보다 하나 이상의 열을 사용하려는 경우 하나 개의 컬럼이 테이블에 수정 인 경우에는 차이가 없습니다 ......

    감사,

  11. ==============================

    11.이전 답변에서 언급 한 바와 같이, 수 (COLUMNNAME) 카운트 반면 열 값이있는 경우에만, (*) 카운트도 NULL 열을 계산합니다.

    이전 답변에서 언급 한 바와 같이, 수 (COLUMNNAME) 카운트 반면 열 값이있는 경우에만, (*) 카운트도 NULL 열을 계산합니다.

    그것은 항상 피하기 *에 가장 좋은 방법입니다 (선택 * 계산 *, ...)

  12. from https://stackoverflow.com/questions/59294/in-sql-whats-the-difference-between-countcolumn-and-count by cc-by-sa and MIT license