sql >> Databasteknik >  >> RDS >> Mysql

Summa, Genomsnitt, Max, Min, Antal NULL-värden

Detta är en bra fråga, och en som inte har ett bra svar. Behandlingen av NULL i dina två exempel är olika.

Det grundläggande problemet är vad NULL betyder att. Vanligtvis används det för att beteckna saknad värden. Men i ANSI-standarden står det för okänt värde. Jag är säker på att filosofer skulle kunna ägna sig åt skillnaden mellan "saknad" och "okänt".

I ett enkelt uttryck (booleskt eller aritmetiskt eller skalärt av annat slag), definierar ANSI resultatet av "okänt" i nästan alla fall där någon av operanderna är "okänd". Det finns några undantag:NULL AND FALSE är falsk och NULL IS NULL är sant, men dessa är sällsynta.

För aggregeringsoperationer, tänk på SUM() som "summa alla kända värden", och så vidare. SUM() behandlar NULL värden skiljer sig från + . Men detta beteende är också standard så det är så alla databaser fungerar.

Om du vill ha en NULL värde för en aggregering när någon av dess operander är NULL , då måste du använda CASE . Jag tror att det enklaste sättet för en enskild kolumn är:

(CASE WHEN COUNT(col) = COUNT(*) THEN SUM(COL) END)


  1. Hur ställer man in kodningen för tabellernas char-kolumner i django?

  2. Hur man pivoterar dynamiskt med datum som kolumn

  3. Gå med i subquery med doktrin 2 DBAL

  4. Hämta procentandel av Count(*) till antalet av alla objekt i GROUP BY