Как я могу получить СР
столбца, игнорируя null и нулевые значения?
У меня есть три столбца, чтобы получить их среднем, я пытаюсь использовать следующий скрипт:
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
Я не't получить какие-либо результаты, однако, три колонны имеют значения, включая нуль, и нули!
Есть в любом случае, чтобы исключить нулевые значения до получения среднего?
пример: средний(NOTNULL(SecurityW))`
Нуль
уже игнорируется, так что вы можете использовать функция nullif
включить 0
до нуля
. Также вы Don'т нужна четкая
и свой, где
о `ActualTime-это не sargable.
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'
P. S. Я понятия не имею, что Таблица2 б
в оригинале запроса, так как нет условия для его так опустил это из моего ответа.
В случае не считая '0' или 'нуль' В средние функции. Просто использовать
AVG(NULLIF(your_column_name,0))
работал для меня:
AVG(CASE WHEN SecurityW <> 0 THEN SecurityW ELSE NULL END)
Вы уже попытаться отфильтровать нуль
значения не нуль
. Я изменил его на не нуль
в, где
п. Так что он будет выполняться. Мы можем отрефакторить это, удаляя функция isnull в метод
авг.Кроме того, я сомневаюсь, что вы'МР на самом деле нужны типа 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