sql >> Database teknologi >  >> RDS >> Mysql

Sum, Avg, Max, Min, Count of NULL værdier

Dette er et godt spørgsmål, og et der ikke har et godt svar. Behandlingen af ​​NULL i dine to eksempler er forskellig.

Det grundlæggende problem er hvad NULL midler. Almindeligvis bruges det til at betegne manglende værdier. Men i ANSI-standarden står det for en ukendt værdi. Jeg er sikker på, at filosoffer kunne vie tomes til forskellen mellem "manglende" og "ukendt".

I et simpelt udtryk (boolesk eller aritmetisk eller skalar af en anden art), definerer ANSI resultatet af "ukendt" i næsten alle tilfælde, hvor nogen af ​​operanderne er "ukendte". Der er nogle undtagelser:NULL AND FALSE er falsk og NULL IS NULL er sandt, men disse er sjældne.

For aggregeringsoperationer skal du tænke på SUM() som "sum alle kendte værdier", og så videre. SUM() behandler NULL værdier anderledes end + . Men denne adfærd er også standard, så det er sådan alle databaser fungerer.

Hvis du vil have en NULL værdi for en aggregering, når enhver af dens operander er NULL , så skal du bruge CASE . Jeg tror, ​​at den nemmeste måde for en enkelt kolonne er:

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


  1. Hvordan bruger jeg MySQL i Visual Studio 2010 med EF4?

  2. java.sql.SQLEundtagelse:Opbrugt resultatsæt

  3. Hvad er formålet med denne form for SQL-injektion?

  4. SQL Server 2008-support slutter. Hvad nu?