Skip to content
techsnow

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.