Unsere Datenschutzrichtlinie wird in Kürze aktualisiert. Bitte sehen Sie sich die Vorschau an.

SQL Grundkurs 1: Die Sprache erlernen

NULL-Werte bei Gruppenfunktionen

Testen Sie unsere 2017 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Was passiert, wenn ich eine Summe bilde und in den Summen-Werten sind NULL-Werte enthalten? Dieses Video erläutert Ihnen, wie Gruppenfunktionen mit NULL-Werten umgehen.

Transkript

Gruppenfunktionen ignorieren NULL-Werte. Was dies in der Praxis bedeutet, ist Thema dieses Videos. Ich verwende für die Demonstration die Gruppenfunktion "COUNT", also die Anzahl. "SELECT COUNT", und zwar fürs erste Mal in der Sonderform "COUNT(*) FROM Wave.", und ich verwende unsere Personaltabelle. "COUNT(*)" bedeutet, dass die Anzahl der Zeilen geprüft wird. Als Ergebnis bekommen wir 21, das bedeutet, dass in unserer Personaltabelle gesamt 21 Datensätze enthalten sind. Wenn Sie also in der Praxis schnell einmal feststellen möchten, wie viele Datensätze eine Tabelle enthält, brauchen Sie nur eingeben "SELECT COUNT(*) FROM" gefolgt vom Namen der Tabelle, und schon bekommen Sie das Ergebnis geliefert. Ich ergänze hier noch den Aliasnamen "S-Datensätze", damit hier deutlich wird, was ich damit ausdrücken möchte. Was ist jetzt der Unterschied, wenn ich "COUNT(*)" verwende ich muss hier noch schauen, dass die Einrückungen auch passen oder eben "COUNT (eine Spalte)" , z.B. die Personalnummer. Vom Ergebnis her bekommen wir, wenn ich die Personalnummer nehme, dasselbe Ergebnis. Was ist der logische Unterschied? "COUNT(*)" zählt die Zeilen und "COUNT(ein Spaltenname)" zählt die Inhalte in dieser Spalte. NULL-Werte, habe ich eingangs erwähnt, werden von Gruppenfunktionen ignoriert. Dies bedeutet, dass sie im Fall von "COUNT", einfach nicht mitgezählt werden. Also gezählt werden alle Werte, die nicht gleich "NULL" sind. Nachdem "Personalnummer" ja die Primärschlüssel-Spalte ist, und keinen NULL-Wert enthalten kann, wäre alles andere als dass diese beiden Varianten dasselbe Ergebnis liefern, nicht denkbar. Was passiert allerdings, wenn wir eine Spalte verwenden, die NULL-Werte enthalten kann, z.B. die Spalte "Akad. Grad", in der der akademische Grad unserer Mitarbeiter gespeichert ist? NULL-Werte werden ignoriert, nicht mitgezählt, also bekommen wir diesmal ein anderes Ergebnis, nämlich 11. D.h. wir wissen, 11 von unseren 21 Mitarbeitern haben ein akademisches Studium abgeschlossen. Dann gibt es für "COUNT" noch eine Sonderform, nämlich ich kann es mit dem Schlüsselwort "DISTINCT" kombinieren. Wir kennen ja "DISTINCT" schon von der SELECT-Klausel "DISTINCT" unterdrückt Duplikate. Im Zusammenhang mit "COUNT" bedeutet das, dass jede Variante nur einmal gezählt wird, d.h. mit anderen Worten, Sie bekommen die unterschiedlichen Varianten als Ergebnis. Wenn wir uns das anschauen, sehen wir jetzt hier, dass wir 21 Mitarbeiter haben, und unter diesen Mitarbeitern sind 11 Akademiker. Und diese 11 Akademiker haben in Summe 5 unterschiedliche akademische Grade, D.h. es gibt manche, die denselben Grad erworben haben. Aber auch hier werden nur jene gezählt, die tatsächlich einen akademischen Grad auch besitzen, D.h. als 6. Variante, diejenige, dass es keinen akademischen Grad gibt, wird hier standardmäßig nicht berücksichtigt, weil eben Gruppenfunktionen NULL-Werte ignorieren. Welche Gruppenfunktionen sind nun davon betroffen? Alle, die die indirekt natürlich auch von der Anzahl abhängig sind. Das wären der "Mittelwert", die "Standardabweichung" und die "Varianz". Minimum und Maximum bleiben von NULL-Werten unbeeinflusst, was das Ergebnis betrifft. Schauen wir uns das mit noch einem Beispiel an. Diesmal möchte ich den "Mittelwert", also die Funktion "AVERAGE" verwenden. In unserer Artikeltabelle gibt es eine Spalte "Lieferzeit". Wir haben in unserer Beispieltabelle nur sehr wenige Einträge mit einer Lieferzeit. Der Großteil erhält hier "NULL". NULL-Werte werden ignoriert. Was bedeutet das? Wenn wir uns jetzt hier von der Lieferzeit die Anzahl ausgeben, "COUNT", dann sehen wir, dass es nur sehr wenige Einträge sind, nämlich 8. Das bedeutet, wenn ich nun die durchschnittliche Lieferzeit berechne, dann wird die Anzahl und die Summe für diese Berechnung, quasi beigezogen. Die eruierte Summe wird also durch 8 dividiert, und nicht durch die Anzahl der über 1000 Datensätze. Daher bekommen wir im konkreten Beispiel eine durchschnittliche Lieferzeit von 3 Tagen heraus. Manchmal möchte man, dass aber auch die NULL-Werte mit in die Berechnung mit eingehen. Was muss man in so einem Fall tun? In so einem Fall müssen wir die NULL-Werte wieder durch etwas anderes Auswertbares ersetzen, d.h. im konkreten Beispiel würde das bedeuten, dass ich hier bei MySQL NULL-Werte mit der IFNULL-Funktion mit einem Ersatzwert ersetzte, in dem Fall dem Wert "0". "0" wird ja hier verwendet, und nun ändert sich gleich das Ergebnis. Wir bekommen jetzt einen Ergebniswert von 0,0216. Das hängt damit zusammen, dass nun die gebildete Summe durch die Gesamtanzahl der Zeilen, weil ja keine NULL-Werte mehr vorhanden sind, dividiert wird. Das macht sich hier also auf diese Art und Weise im Ergebnis bemerkbar. Kleine Unterschiede gibt es hier bei Oracle und dem Microsoft SQL Server. Bei Oracle beschränkt sich der Unterschied ja darauf, dass anstelle der Funktion "IFNULL" die Funktion "NVL" verwendet werden muss, um dasselbe Ergebnis zu erzielen. Hier könnten wir auch die Runden-Funktion einsetzen, wenn wir nicht diese große Anzahl an Nachkommastellen angezeigt bekommen möchten. Wenn wir jetzt noch abschließend uns das Ganze beim Microsoft SQL Server ansehen, müssen wir natürlich "ISNULL" anstelle von "IFNULL" einsetzen. Wenn wir das Ergebnis uns anzeigen lassen, fällt hier auf, dass wir als Ergebnis 0 bekommen. Das hängt damit zusammen, dass der SQL-Server intern etwas anders umgeht, nämlich er behält den ursprünglichen Datentyp bei der Berechnung bei. Lieferzeit hat einen "Integer", also einen ganzzahligen Datentyp, deshalb wird das Ergebnis auf eine ganze Zahl gerundet, und aus 0,02 wird deshalb 0. Wenn wir also möchten, dass wir hier die Nachkommastellen angezeigt bekommen, müssen wir vor der Berechnung, z.B. mit der Konvertierungsfunktion "CAST (Lieferzeit)" in einen anderen , Datentyp, z.B. "Real", das ist ein Gleitkomma-Datentyp, konvertieren. Dann bekommen wir auch hier entsprechend die Nachkommastellen ausgeworfen. Zusammenfassend möchte ich also festhalten, NULL-Werte werden bei Gruppenfunktionen ignoriert. Das hat keine Auswirkungen auf die Summe, Minimum und Maximum, aber alle Gruppenfunktionen, die auf "COUNT" basieren sowie "COUNT" selber, sind betroffen. D.h. die Anzahl, der Mittelwert, die Standardabweichung und die Varianz. Wenn Sie nicht wollen, dass NULL-Werte unberücksichtigt bleiben, müssen Sie sie im Ausdruck durch einen Ersatzwert ersetzen. Widrigenfalls bleiben sie unberücksichtigt.

SQL Grundkurs 1: Die Sprache erlernen

Arbeiten Sie sich in die Grundlagen der Datenbanksprache SQL am Beispiel von Microsoft SQL Server, Oracle und MySQL ein und lassen Sie sich die praktische Nutzung erklären.

14 Std. 40 min (112 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!