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.