sql >> Databáze >  >> RDS >> Sqlserver

Nechte AVG ignorovat hodnoty Null nebo Zero

NULL je již ignorováno, takže můžete použít NULLIF pro otočení 0 na NULL . Také nepotřebujete DISTINCT a vaše WHERE v ActualTime není možné protahovat.

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 Nemám ponětí, co Table2 b je v původním dotazu pro, protože pro něj není žádná podmínka spojení, takže jsem ho z mé odpovědi vynechal.



  1. PostgreSQL - maximální počet parametrů v klauzuli IN?

  2. Příklad replikace Oracle Streams krok za krokem

  3. Tipy pro monitorování MariaDB Cluster

  4. PostgreSQL drop omezení s neznámým názvem