sql >> Database >  >> RDS >> Mysql

Som, Gem, Max, Min, Aantal NULL-waarden

Dit is een goede vraag, en een die geen goed antwoord heeft. De behandeling van NULL in uw twee voorbeelden is anders.

Het fundamentele probleem is wat NULL middelen. Gewoonlijk wordt het gebruikt om ontbrekend aan te duiden waarden. In de ANSI-standaard staat het echter voor een onbekende waarde. Ik weet zeker dat filosofen boekdelen zouden kunnen wijden aan het verschil tussen "ontbrekend" en "onbekend".

In een eenvoudige uitdrukking (booleaans of rekenkundig of scalair van een andere soort), definieert ANSI het resultaat van "onbekend" in bijna alle gevallen waarin een van de operanden "onbekend" is. Er zijn enkele uitzonderingen:NULL AND FALSE is onwaar en NULL IS NULL is waar, maar deze zijn zeldzaam.

Denk voor de aggregatiebewerkingen aan SUM() als "alle bekende waarden optellen", enzovoort. SUM() behandelt NULL waarden anders dan + . Maar dit gedrag is ook standaard, dus zo werken alle databases.

Als je een NULL . wilt waarde voor een aggregatie wanneer elke van zijn operanden is NULL , dan moet je CASE . gebruiken . Ik denk dat de gemakkelijkste manier voor een enkele kolom is:

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


  1. MySQL om het aantal rijen te krijgen die op een datum vallen voor elke dag van een maand

  2. De beste manieren om SQL DELETE-instructie in een SQL-tabel te gebruiken

  3. Mysql-tabel maken met expliciete standaardtekenset, wat als ik dat niet doe?

  4. Hoe gegevens in twee verschillende tabellen invoegen?