Reading Data
GROUP BY and HAVING
GROUP BY splits rows into groups and runs an aggregate on each group.
SELECT city, COUNT(*) AS students, AVG(marks) AS average
FROM students
GROUP BY city
HAVING COUNT(*) > 1
ORDER BY average DESC;Output
city | students | average -------+----------+-------- Lahore | 2 | 81.5
WHERE filters rows before grouping. HAVING filters groups after.