sql >> Database teknologi >  >> RDS >> Sqlserver

Få AVG til at ignorere nul- eller nulværdier

NULL er allerede ignoreret, så du kan bruge NULLIF for at slå 0 til NULL . Du behøver heller ikke DISTINCT og din WHEREActualTime er ikke sargerbar.

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 Jeg aner ikke hvad Table2 b er i den oprindelige forespørgsel, da der ikke er nogen join-betingelse for det, så har udeladt det fra mit svar.



  1. SQLite JSON_QUOTE()

  2. Hvordan opretter jeg en unik begrænsning, der også tillader nuller?

  3. N+1 redundans og serverkonsolidering

  4. Sådan opretter du en navigationsformular i Microsoft Access