GROUP BY – Werte gruppieren

Mittels GROUP BY kann man Zeilen gruppieren und mit den SQL Funktionen weitere Berechnungen durchführen.

GROUP BY Syntax

 SELECT count(*) FROM tabellen_name GROUP BY id

Als erstes wollen wir eine Liste mit den ID’s der Fragen haben und wie häufig für die jeweilige Frage gevotet wurde, dazu nutzen wir die Tabelle „question_votes“:

 SELECT question_id, COUNT(*) FROM question_votes GROUP BY question_id

Mit „GROUP BY question_id“ werden die gleichen ID’s miteinander gruppiert. Doch die Gruppierung alleine bringt uns nichts, wir müssen auch noch eine Funktion anwenden. In diesem Fall nutzen wir COUNT, denn wir wollen ja die Anzahl der Einträge zählen, welche in jeder Gruppe sind.

Nun wollen wir eine Liste mit allen Benutzern, die schonmal eine Frage gestellt haben und zusätzlich die Anzahl der Fragen, die sie gestellt haben:

 SELECT users.*, count(questions.user_id)
 FROM users JOIN questions  ON (users.id = questions.user_id) 
 GROUP BY questions.user_id 

Nun sollen alle Fragen selektiert werden und zusätzlich die Anzahl der Antworten, für die jeweilige Frage:

 SELECT questions.*, count(questions.id)  FROM questions JOIN answers 
 ON (questions.id = answers.question_id)  GROUP BY questions.id 

Am besten man macht erstmal einen einfachen JOIN (oder LEFT/RIGHT JOIN, je nach Bedarf) und schaut dann, anhand welcher Spalten man die Werte gruppiert. Dadurch vermeidet man auch Fehler oder findet schneller heraus, warum ein bestimmter Query nicht zum Ergebnis führt.