Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

SQL Grundkurs 1: Die Sprache erlernen

ROLLUP - MySQL

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Auch mit MySQL lassen sich beim Gruppieren Zwischen- und Endsummen ergänzen. Wie die entsprechende Syntax für die Verwendung von ROLLUP aussieht, wird Ihnen in diesem Video vermittelt.

Transkript

In diesem Video möchte ich Ihnen zeigen, wie Sie mit MySQL über den Zusatz "WITH ROLLUP" Zwischen- und Endsummen in gruppierte SQL Anweisungen einbauen können. Dazu habe ich folgende Anweisung vorbereitet. Wir verwenden unsere Artikeltabelle, gruppieren nach der Titelgruppe und zählen über die Gruppenfunktion "COUNT", wie viele Artikel in dieser Gruppe vorhanden sind. Um nun hier eine Gesamtanzahl zu bekommen, kann ich jetzt hier am Ende hinter der gruppierten Spalte den Zusatz "WITH ROLLUP" ergänzen. Sie sehen jetzt, dass hier MySQL Workbench hier im Editor Fehler markiert. Das hier ist leider ein Bug vom Editor und nicht von der Datenbank selber und auch wenn Sie diese Anweisung jetzt prinzipiell ausführen, bekommen sie eine Fehlermeldung. Wenn Sie allerdings jetzt hier nicht die Option verwenden, die Anweisung ausführen, sondern das gesamte Skript auszuführen, Sie haben ja hier die Unterscheidung zwischen "execute all" oder "selection" oder standardmäßig verwenden wir immer "current statement" mit dem ich Strg+Eingabetaste drücke. Wenn ich jetzt Strg+Umschalttaste+Eingabetaste drücke, dann wird das funktionieren. Und Sie sehen, jetzt haben wir auch hier ein gewünschtes Ergebnis bekommen. Wir haben hier zusätzlich zu den bisherigen Zeilen eine neue Zeile, die hier bei der Spalte "Gruppe" ein "NULL" aufweist, weil es ja keine spezielle Gruppe ist sondern der Gesamtwert und hier wird eben die Gesamtanzahl mit 1112 Artikeln angegeben. Also lassen Sie sich nicht davon verwirren, dass der Editor das als Fehler ausführt. Sie können das einfach umgehen, indem sie eben Strg+Shift+Enter drücken oder einen entsprechenden Menübefehl auswählen, um das gesamte Statement oder den markierten Teil auszuführen. Interessant wird "ROLLUP", wenn wir nach mehr als einer Spalte kopieren. Dazu möchte ich folgendes Beispiel hier verwenden, und zwar möchte ich mit Ihnen den wahren Wert je Artikelgruppe und Lager eruieren. Die Basisanweisung, die wir dafür benötigen, habe ich schon vorbereitet, vielleicht ganz kurz zur Erklärung, wir benötigen diese vier Tabellen für dieses Beispiel, die wir joinen möchten, "Warenwert" je Lager- und Artikelgruppe, Das hiesst wir brauchen das Lager, um die Lagerbezeichnung zu bekommen. Wir benötigen die Artikelgruppe, um hier die Bezeichnung der Artikelgruppe verwenden zu können und den Warenwert können wir aus der Summe von der gelagerten Menge und dem Einkaufspreis des Artikels eruieren. Diesen "JOIN" der vier Tabellen habe ich hier schon vorbereitet, Das heisst von der Lagertabelle bis hin zur Tabelle "Artikelgruppen". Zusätzlich schließe ich hier die Lagernummer 5 aus, denn das ist das "Kaputtteilelager" und Artikel in diesem Lager repräsentieren hier keinen Wert. In der SELECT-Klausel habe ich eben hier schon die Bezeichnung des Lagers und die Bezeichnung der Artikelgruppe hingeschrieben und ich verwende hier schon die Summe von Menge und Einkaufspreis als berechneten Wert. Damit haben wir jetzt unsere Basisdaten, wir haben hier einerseits jeweils das Lager, die Artikelgruppe und den Wert. Nun müssen wir nach diesen ersten beiden Spalten noch gruppieren und von diesem Wert die Summe bilden. Das werde ich jetzt hier tun, das heisst ich ergänze jetzt hier die Gruppenfunktion "SUM" für die Summe und eine entsprechende GROUP BY-Klausel. "GROUP BY"- in dem Fall "L.name" nach dem Lagernamen und nach dem "G.Grtext", der Bezeichnung der Artikelgruppe. Nun haben wir einen Gesamtwert für jede Kombination. Ich weiß jetzt zum Beispiel, dass in meinem Geschäftslager einerseits für diesen Betrag Artikel aus der Artikelgruppe "Haushalt" liegen und im selben Lager für diesen Betrag Artikel aus der Artikelgruppe "Küchengeschirr" und so weiter. Wenn ich jetzt hier wieder ergänze mit "WITH ROLLUP", dann möchte ich jetzt hier Zwischensummen bekommen. Ich markiere die Anweisung und führe sie mit Strg+Shift+Enter aus, weil wenn ich sie nicht markiert hätte, hätte mir mit Strg+Shift+Enter der Editor das ganze Skript ausgeführt und das will ich ja nicht, ich will ja nur diese eine Anweisung ausführen. Das ist also der  Workaround für diesen Bug hier im MySQL Workbench, damit das "WITH ROLLUP" hier auch wirklich funktioniert. Betrachten wir uns aber das Ergebnis. Wir sehen jetzt hier einerseits, dass wir jetzt hier, nachdem wir das Geschäftslager sozusagen mit allen Gruppen erledigt haben, eine neue Zwischenzeile hier bekommen, eine Zwischensumme für das Geschäftslager in dem diese Werte aufsummiert sind. Danach kommt das Hauptlager mit jeder Artikelgruppe und auch hier bekommen wir zusätzlich hier eine Zwischensumme. Und nachdem wir das "ROLLUP" auf beide Spalten gemacht haben, bekommen wir nicht nur auf diese Kombination eine Zwischensumme, sondern wie beim ersten Beispiel auch, ganz am Ende eine Gesamtsumme. Wenn Sie nun einen Zwischenwert je Artikelgruppe haben möchten, dann können Sie die Reihenfolge der Spalten hier auch vertauschen. Das heisst Sie können jetzt hier sagen, OK ich nehme zuerst hier in meiner Gruppierung den Text der Artikelgruppe und erst anschließend nehme ich jetzt hier den Namen des Lagers. Ich markiere wieder und führe die Anweisung aus und jetzt haben wir die Gruppierung dahingehend verändert, dass zuerst nach der Artikelgruppe gruppiert wird, das heisst wir haben die Gruppe, die Gruppe "Garten" ist vielleicht kein gutes Beispiel, denn hier haben wir nur im Hauptlager etwas liegen, nehmen wir uns die Artikelgruppe "Haushalt" hier, da sehen wir das besser. Da haben wir pro Lager einen Wert und wieder einen Zwischenwert. In dem Fall würde ich Ihnen empfehlen, die Reihenfolge auch in der SELECT-Klausel entsprechend anzupassen, weil das sicher eine bessere Optik für das Gesamtergebnis erzeugt. Also ich habe auch das hier jetzt ausgetauscht und führe diese Anweisung noch einmal aus und jetzt sehen wir es noch besser dargestellt. Wir haben jetzt hier zum Beispiel die Gruppe "Haushalt" vorn, dann einen Wert für jedes Lager und am Ende hier diesen Zwischenwert und natürlich finden wir ganz am Ende diesen Gesamtwert vor. Ein Pendant für die CUBE-Anweisung, die alle möglichen Iterationen bei Microsoft SQL Server oder auch bei Oracle liefern, gibt es bei MySQL nicht. Sie haben in diesem Video gesehen, wie sie mit "ROLLUP" bei MySQL Zwischen- und Endwerte generieren können. Achten sie darauf, ob ihre Version der MySQL Workbench auch noch diesen Bug aufweist und führen sie gegebenenfalls das Skript aus und nicht die einzelne Anweisung.

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!