分组GROUP BY

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)

知识点说明:

  1. PostgreSQL中,SELECT后面列出的非聚合字段,必须全部写在GROUP BY后面,否则报错。
  2. count(1):统计每个分组里一共有多少条记录
  3. max(age):获取分组内age的最大值
  4. min(id):获取分组内id的最小值

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注