SELECT zwei Spalten mit zwei Bedingungen?

simonthesorcerer

Grünschnabel
Hallo zusammen,

Vorab: Ich bin sehr unwissend mit Mysql usw. sorry schonmal ...

EDIT: AHH, ich habe vergessen den Programmiersprachen-Namen in den Titel zu schreiben, ... wie kann ich das ändern?

also:
Ich arbeite in meiner Wordpress-Installation mit dem Tabellen-Plugin "wpdatatables", mit dem man Tabellen aus Mysql-Datenbanken erstellen kann, die man mit eigenen Querys bestückt. Ich nutze dies zum Verwalten meiner Musikschule.
Jetzt möchte ich anfangen, unsere Schülerdatenbank statistisch auszuwerten.

Die Kundendatenbank hat folgende relevante Spalten:

- "status" Anmeldestatus des Schülers
- "beginnmonat" Unterrichsbeginn ab Monat
- "endeabmonat" Unterrichtsende ab Monat

Bis jetzt habe ich Anfang und Ende separat ausgewertet, also zwei MYSQL-Querys geschrieben, die alle Schüler des jeweiligen Anfangmonats bzw. Endmonats zählen:

Code:
 SELECT beginnmonat, COUNT(*) "Anzahl" FROM wpdatatable_6 WHERE status = 'F - UNTERRICHT LÄUFT' GROUP BY beginnmonat

und

Code:
SELECT endeabmonat, COUNT(*) "Anzahl" FROM wpdatatable_6 WHERE status = 'X - KEIN UNTERRICHT' GROUP BY endeabmonat

Schöner wäre es aber die monatliche An- und Abmeldebilanz zu sehen, also die An-und Abmeldungen zusammen in einer Tabelle in Relation.

Ich möchte alle Schüler mit dem Status "F - UNTERRICHT LÄUFT" aus Spalte "beginnmonat" , und alle Schüler mit dem Status "X - KEIN UNTERRICHT" aus Spalte "endeabmonat" zählen, die dann nach Monat sortiert in einer Tabelle angezeigt wird.

Das Monatsformat ist folgendes: JJJJ-MM, also zum Beispiel 2017-01 oder 2016-12

Ehrlich gesagt habe ich keine Ahnung wie ich diese beiden SELECT Befehle zusammenpacken kann, damit mir das Plugin eine Tabelle ausspuckt, die drei Spalten hat:

Monat
Menge Anmeldungen
Menge Abmeldungen


Ich würde mich freuen, wenn ihr mich unterstützen könnt.
Herzliche Grüße aus Köln

Simon

PS: Übrigens kann man in dem Plugin auch Diagramme erstellen. Mein endgültiges Ziel ist es, die o.g. Query in einem Diagramm visuell darzustellen.

Hier der Link zu wpdatatables: http://wpdatatables.com/
 
Moin simonthesorcerer,

zu diesem wpdatatables-Krams kann ich nichts sagen; damit habe iche Berührungspunkte.

Der SQL-Teil liesse sich z.B. so abfackeln:

SQL:
SELECT Monat, Anmeldungen, Abmeldungen From (
   SELECT beginnmonat as Monat, COUNT(*) as Anmeldungen , 0 as Abmeldungen
   FROM wpdatatable_6
   WHERE status = 'F - UNTERRICHT LÄUFT'
   GROUP BY beginnmonat
UNION ALL
   SELECT endeabmonat as Monat, 0 , COUNT(*) as Abmeldungen
   FROM wpdatatable_6
   WHERE status = 'X - KEIN UNTERRICHT'
GROUP BY endeabmonat
) whatever
Group by Monat;

Nachteil:
Es tauchen nur Monate auf, in denen auch wenigstens eine An- oder Abmeldung stattfand.
Du hast also bei einer Statistik über 3 Jahre u.U. keine 36 Monate, sondern nur 32.

Grüße
Biber
 
Hey Biber,

super!!! Endlich bekomme ich mal keine Fehlermeldung mehr zurück.

Leider bekomme ich so bei ABMELDUNGEN nur die Zahl 0 in allen Monaten.

Dass Monate, in denen keine Abmeldungen oder Anmeldungen stattfanden, nicht auftauchen habe ich auch schon bedacht, das finde ich aber nicht schlimm, es hält das am Ende dargestellte Diagramm etwas schlanker.

zu diesem wpdatatables-Krams kann ich nichts sagen; damit habe iche Berührungspunkte.
Ja, ich habe das oben auch nur erwähnt, damit ihr den Zusammenhang wisst, und ich nicht in komische Erklär-Nöte gerate. Das mit dem Plugin hat hier keine Bewandtnis, es geht mir nur um den verflixten Code :)


Also vielen Dank schonmal, ich versuche später, wenn ich Zeit habe, auch nochmal an dem Code herumzuschrauben, jedoch würde ich mich sehr über weitere Tipps freuen.

Viele Grüße aus Köln
Simon
 
Hey Biber,
ich habe in deinem Code noch folgendes angepasst, siehe Zeile 7. Schien mir plausibel, jedoch wirft die Spalte "Abmeldungen" trotzdem in allen Monaten "0" aus:

SQL:
SELECT Monat, Anmeldungen, Abmeldungen FROM (
   SELECT beginnmonat AS Monat, COUNT(*) AS Anmeldungen , 0 AS Abmeldungen
   FROM wpdatatable_6
   WHERE STATUS = 'F - UNTERRICHT LÄUFT'
   GROUP BY beginnmonat
UNION ALL
   SELECT endeabmonat AS Monat, 0 AS Anmeldungen, COUNT(*) AS Abmeldungen
   FROM wpdatatable_6
   WHERE STATUS = 'X - KEIN UNTERRICHT'
GROUP BY endeabmonat
) whatever
GROUP BY Monat;

So richtig verstehen tue ich es nicht ...
 
Übrigens: Wenn ich am Ende nicht

SQL:
GROUP BY Monat

hinschreibe, sondern

SQL:
ORDER BY Monat

dann wirft er mir in der Spalte ABMELDUNGEN die richtigen Ergebnisse aus, jedoch gibt es dann für jeden Monat jeweils zwei Zeilen ... Und GROUP BY und ORDER BY zusammen geht ja irgendwie auch nicht ...
 
Moin simonthesorcerer,

ah ja... weil ich schlau bin...;)

Ist schon alles richtig bis auf die erste Zeile.
Ich will ja nicht nur ein GROUP BY machen, sondern auch ettwas aggregieren.

SQL:
-- alt: SELECT Monat, Anmeldungen, Abmeldungen FROM
--neu:
SELECT Monat, sum(Anmeldungen) as Anmeldungen, sum(Abmeldungen) as Abmeldungen FROM

...

Vor dem Summieren sehen meinetwegen die ersten zwei Monate so aus:

Monat Anmeldungen Abmeldungen
2016-11 1 0
2016-11 0 7

Mit der Ergänzung:
Monat Anmeldungen Abmeldungen
2016-11 1 7

Grüße
Biber
 
Tatsächlich, jetzt klappts.
Herzlichen Dank!!!!
Das macht auch echt Spass. Kannst du mir etwas empfehlen, mit dem ich mich SQL weiter näher kann? So wie SelfHTML für Html?

Übrigens, ich bin ja bei weitem kein SQL-Profi, aber dieses Wordpress-Plugin "wpdatatables" habe ich ziemlich ausgecheckt, falls da jemand eine Frage hat, nur zu ...

Viele Grüße
Simon
 
Moin Simon,

da habe ich wenig tolle Tipps.
Allgemeingültige SQL-Tutorials sind

www.w3schools.com
www.sqlzoo.net

Da würde ich anfangen.
Deutsche Tutorials habe ich keinen Überblick.
Kannst aber nach den Musterlösungen von Yaslaw (Mitgled in diesem Forum) suchen, die dauerhaft auf seiner Homepage stehen. (yaslaw-info oder so ähnlich)

Herstellerbezogene Tutorials (z.B. für mySQL) mach im Schritt zwei.

Grüße
Biber
 

Neue Beiträge

Zurück