sql >> Databáze >  >> RDS >> Mysql

Součet, Prům, Max, Min, Počet hodnot NULL

To je dobrá otázka, na kterou není dobrá odpověď. Zacházení s NULL ve vašich dvou příkladech se liší.

Základní problém je v tom, co NULL prostředek. Běžně se používá k označení chybějící hodnoty. Ve standardu ANSI však znamená neznámé hodnota. Jsem si jistý, že filozofové by mohli věnovat svazky rozdílu mezi „chybějícím“ a „neznámým“.

V jednoduchém výrazu (booleovský nebo aritmetický nebo skalární jiného druhu) ANSI definuje výsledek „neznámý“ téměř ve všech případech, kdy je některý z operandů „neznámý“. Existuje několik výjimek:NULL AND FALSE je nepravda a NULL IS NULL je pravda, ale ty jsou vzácné.

Pro operace agregace si představte SUM() jako "součet všech známých hodnot" a tak dále. SUM() zachází s NULL hodnoty se liší od + . Ale toto chování je také standardní, takže tak fungují všechny databáze.

Pokud chcete NULL hodnota pro agregaci, když je jakýkoli jeho operandů je NULL , pak musíte použít CASE . Myslím, že nejjednodušší způsob pro jeden sloupec je:

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


  1. Naformátujte výsledek dotazu mysql do požadovaného formátu

  2. chyba přerušovaného serveru MySQL zmizela

  3. Počet sloupců MySQL neodpovídá počtu hodnot na řádku 1

  4. Výčet tabulek použitých v dotazu mysql?