GROUP BY子句用于将具有相同数据的表中的这些行分组在一起。 它与SELECT语句一起使用。 GROUP BY子句通过多个记录收集数据,并将结果分组到一个或多个列。 它也用于减少输出中的冗余。 分组后,只可以显示和组有关的信息,不能显示组内单独某一行的其它信息。 比如分组后,可以显示每个组的名字、组的成员数量、组的最大值、最小值。
比如 我们按照subjects来分组。 执行下面查询:
SELECT * FROM student GROUP BY subjects;
但是上面这样写是有错误的。 因为这里查*,里面的字段和组没关系了。比如已经按照subjects分组了,那么就不能直接显示每个学生的name了,因为name是组里面单独成员的信息。只能显示和组有关的,比如subjects可以显示。

SELECT subjects FROM student GROUP BY subjects;
我们可以查询每个组的最大年龄,这个时候就可以使用一些聚合函数来实现。
SELECT subjects,max(age) FROM student GROUP BY subjects;
SELECT subjects,count(1),max(age),min(id) FROM public.student GROUP BY subjects;
Code language: CSS (css)

知识点说明:
- PostgreSQL中,
SELECT后面列出的非聚合字段,必须全部写在GROUP BY后面,否则报错。count(1):统计每个分组里一共有多少条记录max(age):获取分组内age的最大值min(id):获取分组内id的最小值
Previous: 排序语句ORDER BY
Next: 分组后再按条件过滤-Having子句