sql >> Database >  >> RDS >> Sqlserver

AVG ophalen waarbij nul- of nulwaarden worden genegeerd

NULL wordt al genegeerd, dus u kunt NULLIF . gebruiken om 0 te veranderen naar NULL . Ook heb je DISTINCT . niet nodig en je WHERE op ActualTime is niet 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' 

PS Ik heb geen idee wat Table2 b is in de oorspronkelijke vraag omdat er geen lidmaatschapsvoorwaarde voor is, dus heb het weggelaten uit mijn antwoord.



  1. Onmiddellijke bestandsinitialisatie:impact tijdens installatie

  2. Back-ups maken van SQL-databases met de VDP Advanced SQL Agent

  3. Hoe DbContext configureren om te werken met Oracle ODP.Net en EF CodeFirst?

  4. Postgresql SQL GROUP BY tijdsinterval met willekeurige nauwkeurigheid (tot milliseconden)