[SQL] 경고를 얻기 : Null 값이 집계 또는 다른 SET 연산에 의해 제거
SQL경고를 얻기 : Null 값이 집계 또는 다른 SET 연산에 의해 제거
나는이 스키마를
create table t(id int, d date)
insert into t (id, d) values (1, getdate()),
(2, NULL)
수행 할 때
declare @mindate date
select @mindate = min(d) from t
나는 경고를
나는 그것에 대해 무엇을 왜 등을 할 수 있습니까?
해결법
-
==============================
1.당신은 또한 그것에 대해 아무것도 할 수 있습니다.
당신은 또한 그것에 대해 아무것도 할 수 있습니다.
그것은 SQL 표준에서 요구 단지 정보 메시지입니다. 그것은 (이 점에서 더 나은 실행 계획을 제공하지 않습니다 경고를 단지 NULL 행을 읽는 바이 패스 SQL Server가 오버 헤드를 가질 수 할 수없는 것을 의미하지만, 사용 불가능하게하는 것 이외의 다른) 어떤 부작용이 없습니다
이 메시지를 반환하는 이유는 SQL 널 (null) 전파에서 대부분의 작업 전반에 걸쳐.
SELECT NULL + 3 개 + 7 개 반환 NULL (? + 3 + 7도 알 수로서이 차종이 감지 알 수없는 수량으로 NULL에 대한)
그러나
SELECT SUM(N) FROM (VALUES (NULL), (3), (7)) V(N)
반환 (10)와 널 (null)이 무시되었다는 경고.
그러나이 정확히 전형적인 집계 쿼리에 대한 당신이 원하는 의미입니다. 모든 행은 항상 매우 유용하지 않습니다 산출 NULL을 끝낼 것 이상 그렇지 않으면 하나의 NULL의 존재는 해당 컬럼에 대한 집계를 의미 할 것입니다.
아래의 무거운 케이크는 무엇입니까? (이미지 출처, 풍경, Photo 이미지 내게로) (변경 자른 및 주석)
세 번째 케이크 무게 후 비늘이 파산하고 그래서 정보는 네번째에 대해 사용할 수 없습니다하지만 둘레를 측정하는 것은 여전히 가능했다.
+--------+--------+---------------+ | CakeId | Weight | Circumference | +--------+--------+---------------+ | 1 | 50 | 12.0 | | 2 | 80 | 14.2 | | 3 | 70 | 13.7 | | 4 | NULL | 13.4 | +--------+--------+---------------+
쿼리
SELECT MAX(Weight) AS MaxWeight, AVG(Circumference) AS AvgCircumference FROM Cakes
보고
+-----------+------------------+ | MaxWeight | AvgCircumference | +-----------+------------------+ | 80 | 13.325 | +-----------+------------------+
비록 기술적으로 위의 결과는 일반적으로 단지 알려지지 복귀보다 유용하다 (미지의 수가 클 수 있으므로) (80)가 무거운 케이크의 중량이라고 확실하게 말할 수 없다.
+-----------+------------------+ | MaxWeight | AvgCircumference | +-----------+------------------+ | ? | 13.325 | +-----------+------------------+
그래서 아마 당신은 NULL을 무시하려는 및 경고는 이런 일이 있다는 사실을 알려줍니다.
-
==============================
2.@juergen 두 개의 좋은 답변을 제공 :
@juergen 두 개의 좋은 답변을 제공 :
그러나 당신은 D 열이 널 (null) 한 다음 D가 너무로 null로 설정되어있는 모든 행을 제외하여이 작업을 수행 할 수있는 ANSI_WARNINGS 옵션이없는 문제를 직접입니다 행을 무시하려는 경우 :
select @mindate = min(d) from t where (d IS NOT NULL)
-
==============================
3.난 당신이 MIN 기능을 사용하기 때문에 당신이 경우에이 경고를 무시할 수 있다고 생각합니다.
난 당신이 MIN 기능을 사용하기 때문에 당신이 경우에이 경고를 무시할 수 있다고 생각합니다.
"COUNT를 제외하고 집계 함수가 null 값을 무시"
-
==============================
4.() D의 가장 낮은 값으로 귀하의 경우 반환 무엇을 min해야합니까?
() D의 가장 낮은 값으로 귀하의 경우 반환 무엇을 min해야합니까?
이 오류는 분 () 함수가 null의 계정에 기록을하지 않았 음을 알려줍니다.
는 NULL 값을 무시하고 가장 낮은 기존의 날짜를 반환해야합니다 그래서 만약 당신이 경고를 무시할 수 있습니다.
당신이 하나의 명령문에 대한 억제 경고에처럼 당신은 이런 식으로 할 수 있다면
set ansi_warnings off select @mindate = min(d) from t set ansi_warnings on
당신은 NULL 값이이 값의 기본값을 사용하여 고려하려는 경우, 당신은이 같은 기본 날짜 값을 설정할 수 있습니다
select @mindate = min(isnull(d, cast(0 as datetime))) from t
-
==============================
5.당신은 집계가 null 값을 고려하고 사용할 수있는 널 (null)로 결과를 처리 확인하려면 :
당신은 집계가 null 값을 고려하고 사용할 수있는 널 (null)로 결과를 처리 확인하려면 :
SELECT IIF(COUNT(N) != COUNT(*), NULL, SUM(N)) as [Sum] FROM (VALUES (NULL), (3), (7)) V(N)
모든 값이 주어진 경우 NULL을 반환합니다.
from https://stackoverflow.com/questions/18719436/getting-warning-null-value-is-eliminated-by-an-aggregate-or-other-set-operation by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] MySQL은 INSERT와 UPDATE 사이의 차이점은 무엇입니까? (0) | 2020.05.25 |
---|---|
[SQL] MySQL의의 LOAD DATA LOCAL INFILE을 사용하여 CSV의 수입시에 MySQL의 날짜 형식 문자열로 날짜를 변경하는 방법 (0) | 2020.05.25 |
[SQL] using 문 내부 SqlConnection.Close () (0) | 2020.05.25 |
[SQL] 는 SQL Server의 "IN"절 제한 (0) | 2020.05.25 |
[SQL] '와'... 이전 문 키워드 근처의 구문이 잘못은 세미콜론으로 종료되어야합니다 (0) | 2020.05.25 |