Null 또는 0 값을 무시하는 AVG 가져오기
어떻게 하면 얻을 수 있습니까?AVG
무시하는 열의NULL
그리고 0 값?
평균을 얻기 위해 세 개의 열이 있습니다. 다음 스크립트를 사용하려고 합니다.
SELECT distinct
AVG(cast(ISNULL(a.SecurityW,0) as bigint)) as Average1
,AVG(cast(ISNULL(a.TransferW,0) as bigint)) as Average2
,AVG(cast(ISNULL(a.StaffW,0) as bigint)) as Average3
FROM Table1 a, Table2 b
WHERE a.SecurityW <> 0 AND a.SecurityW IS NOT NULL
AND a.TransferW<> 0 AND a.TransferWIS NOT NULL
AND a.StaffW<> 0 AND a.StaffWIS NOT NULL
AND MONTH(a.ActualTime) = 4
AND YEAR(a.ActualTime) = 2013
결과가 나오지 않지만 세 개의 열에 NULL과 0이 포함된 값이 있습니다!
평균을 얻기 전에 null 값을 제외할 방법이 있습니까?
예:AVERAGE(NOTNULL(SecurityW))
NULL
이미 무시되었으므로 를 사용할 수 있습니다.NULLIF
방향을 틀다0
로.NULL
또한 당신은 필요하지 않습니다.DISTINCT
그리고 당신의WHERE
에ActualTime
인수할 수 없습니다.
SELECT AVG(cast(NULLIF(a.SecurityW, 0) AS BIGINT)) AS Average1,
AVG(cast(NULLIF(a.TransferW, 0) AS BIGINT)) AS Average2,
AVG(cast(NULLIF(a.StaffW, 0) AS BIGINT)) AS Average3
FROM Table1 a
WHERE a.ActualTime >= '20130401'
AND a.ActualTime < '20130501'
PS 나는 무엇인지 전혀 모릅니다.Table2 b
에 대한 조인 조건이 없으므로 원래 쿼리에 있습니다. 그래서 제 답변에서 생략했습니다.
이것은 효과가 있을 것입니다, 하지만 시도하지 않았습니다.0을 제외합니다.NULL은 기본적으로 제외됩니다.
AVG (CASE WHEN SecurityW <> 0 THEN SecurityW ELSE NULL END)
평균 함수에서 '0' 또는 'NULL'을 고려하지 않은 경우.간단히 사용
AVG(NULLIF(your_column_name,0))
저를 위해 일했습니다.
AVG(CASE WHEN SecurityW <> 0 THEN SecurityW ELSE NULL END)
이미 필터링을 시도하고 있습니다.NULL
와의 가치.NOT NULL
로 변경했습니다.IS NOT NULL
에서WHERE
실행할 절입니다.우리는 이것을 제거함으로써 리팩터링할 수 있습니다.ISNULL
에서 기능하는.AVG
방법.또한, 당신이 정말로 필요로 할 것 같지는 않습니다.bigint
깁스를 제거할 수 있습니다.
SELECT distinct
AVG(a.SecurityW) as Average1
,AVG(a.TransferW) as Average2
,AVG(a.StaffW) as Average3
FROM Table1 a, Table2 b
WHERE a.SecurityW <> 0 AND a.SecurityW IS NOT NULL
AND a.TransferW<> 0 AND a.TransferWIS IS NOT NULL
AND a.StaffW<> 0 AND a.StaffWIS IS NOT NULL
AND MONTH(a.ActualTime) = 4
AND YEAR(a.ActualTime) = 2013
null 값은 평균 계산에서 제외됩니다.0 값도 제외해야 하는 경우에는 avg 함수 안에서 디코드 함수를 사용하면 됩니다.
SELECT AVG(decode(a.SecurityW,0,null,a.SecurityW)) as Average1
,AVG(decode(a.TransferW,0,null,a.TransferW)) as Average2
,AVG(decode(a.StaffW,0,null,a.StaffW)) as Average3
FROM Table1 a, Table2 b
WHERE MONTH(a.ActualTime) = 4
AND YEAR(a.ActualTime) = 2013;
언급URL : https://stackoverflow.com/questions/17425011/get-avg-ignoring-null-or-zero-values
'programing' 카테고리의 다른 글
iOS에서 numpad 키보드에 '완료' 버튼을 추가하는 방법 (0) | 2023.08.08 |
---|---|
mariadb 프로세스 목록의 InnoDB 정리 작업자 (0) | 2023.08.08 |
컨테이너 이름을 사용하여 호스트에서 도커 컨테이너 액세스 (0) | 2023.07.29 |
Xcode에서 빌드 시간을 줄이고 컴파일 시간을 단축하는 방법은 무엇입니까? (0) | 2023.07.29 |
Angular 2+를 사용하여 입력 포커스 감지 (0) | 2023.07.29 |