복붙노트

[SQL] COUNT (*)는 항상 결과를 반환합니까?

SQL

COUNT (*)는 항상 결과를 반환합니까?

나는 쿼리 등을 실행하는 경우 :

SELECT COUNT(*) as num FROM table WHERE x = 'y'

항상 쿼리가 어떤 기록과 일치하지 않는 경우에도, 결과를 반환 할 것인가? 아니면 내가 유효성을 검사 할 필요합니까 있는지 행이 결과로 반환되어 있는지 확인?

해결법

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

    1.네, 집계의 반환은 제로 때문이다. 당신이 GROUP BY를 추가하지 않는 한 어떤 그룹이 없기 때문에이 경우 검색 결과가 없습니다 ...

    네, 집계의 반환은 제로 때문이다. 당신이 GROUP BY를 추가하지 않는 한 어떤 그룹이 없기 때문에이 경우 검색 결과가 없습니다 ...

    당신이 다음에 행을 GROUP BY를 추가하지 않는 한 MAX / SUM 등 NULL을 반환합니다. 만 반환에게 어떤 결과의 수를 계산

    편집, 조금 늦게 : SUM은 MAX처럼 NULL을 반환

    [편집] 2013 년 5 월 :이 모든 주요 RDBMS에 적용됩니다. 나는 ANSI 표준에 따라 추측

  2. ==============================

    2.예, "계산"기능 자체의 반환 값은 예외없이 항상 null이 아닌 정수입니다.

    예, "계산"기능 자체의 반환 값은 예외없이 항상 null이 아닌 정수입니다.

    당신이 실제로 결과 집합은 쿼리의 반환 값에 더 관심이있을 수 있다고 말했다 가졌어요. 그런 경우에는, 당신은 단순히 쿼리 절에 "그룹화"를 포함하는지 여부를 고려해야한다.

    같은 집계 함수와 비 그룹화 쿼리

    select count(*), sum(*), max(*), min(*) from table
    

    집계 기능 (들)의 반환 값 (들)을 포함하는 하나의 레코드가있는 결과 집합을 생성한다. 이 경우, 결과 세트는 항상 포함대로 집계 함수의 반환 값을 포함하는 열이 정확히 하나 개의 기록을해야합니다. 이러한 최소, 최대, 합과 같은 다른 집계 함수의 리턴 값이 널이 될 수 있지만,이 기록 펜텐 내 개수의 리턴 값은 항상 널이 아닌 정수 것이다. 위의 예에서 반환 된 기록은 "제로, NULL, NULL, NULL"이 될 수 있지만, 카운트가 널 (null)을 반환하지도, "NULL, NULL, NULL, NULL"으로하지 않습니다. 만 호출하는 경우 그럼, "계산"이 항상 카운트의 null 이외의 반환 값을 포함 반환하는 하나 개의 레코드에서 하나의 열; 따라서 당신은 당신의 카운트 쿼리의 스칼라 반환 값은 항상 null 이외의 정수가됩니다 안심하실 수 있습니다.

    같은 집계 함수를 가진 반면에, 그룹화 된 쿼리

    select count(*), sum(*), max(*), min(*) from table group by column
    

    각 레코드는 식별 된 각 그룹에 대한 집계 기능 (들)의 반환 값을 포함하는 0 개 이상의 레코드가있는 결과 집합을 생성한다. 식별 된 그룹이없는 경우이 경우에, 거기 집계 함수가 실행하기 위해 어떤 그룹이 기능이 실행되지 않습니다, 그리고 "쿼리 반환 값은"전혀 기록에 빈 설정됩니다.

    결과를 볼 수없는 기록을 가진 테이블에 그것을 밖으로 테스트 :

    create table #t (c int);
    select COUNT(c), MIN(c), MAX(c), SUM(c) from #t; --returns one record {0, null, null, null}
    select COUNT(c), MIN(c), MAX(c), SUM(c) from #t group by c; --returns no records
    drop table #t;
    

    당신이 수, 최소, 최대, 또는 합계를 호출하고 있는지 그래서, 개별 집계 함수의 반환 값뿐만 아니라 쿼리 자체의 "반환 값", 및 결과 집합에 포함 된 것뿐만 아니라 이해하는 것이 중요합니다.

  3. ==============================

    3.집계 함수 카운트 ()는 항상 값을 반환

    집계 함수 카운트 ()는 항상 값을 반환

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

    4.네, 그것은 항상 숫자를 반환합니다

    네, 그것은 항상 숫자를 반환합니다

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

    5.예, 이러한 경우에 0을 반환 할 수 있습니다.

    예, 이러한 경우에 0을 반환 할 수 있습니다.

  6. ==============================

    6.항상이 같은 결과의 행이있을 것입니다 :

    항상이 같은 결과의 행이있을 것입니다 :

    | COUNT(*) |
    ------------
    | 0        |
    

    일치하는 항목이없는 경우.

    그건 그렇고, 내가 대신 *의 기본 키를 계산하는 것을 선호합니다.

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

    7.어떤 기록이 일치하지 않을 경우 계수는 0을 반환합니다. (당신이 어떤 구문 오류가 아니라면 네, 계산 항상은 결과를 반환)

    어떤 기록이 일치하지 않을 경우 계수는 0을 반환합니다. (당신이 어떤 구문 오류가 아니라면 네, 계산 항상은 결과를 반환)

  8. from https://stackoverflow.com/questions/2552086/does-count-always-return-a-result by cc-by-sa and MIT license