PG/GP group by expression语法

yzsDBA 2022-04-19

news

333 字丨阅读本文需 5 分钟

GROUP BY在关系数据库中比较常见,他是SQL和PG不可或缺的一个语法。除了可以使用简单字段分组外,还可以使用表达式以更加复杂的方式进行分组。

首先看下简单的GROUP BY语句:

postgres=# select *from t1;

 id1 |   name   | class | score

-----+----------+-------+-------

   1 | math     |     1 |    50

   2 | math     |     2 |    90

   3 | math     |     1 |    70

   5 | chinese  |     1 |    50

   6 | chinese  |     2 |    60

   4 | chinese  |     2 |    60

   7 | physical |     1 |    90

   8 | physical |     2 |    80

(8 行记录)

如果我们想看下某一科目平均分,那么可以使用上述方法进行查询。Group by 1和group by name是相同的,只是语法的不同。

现在看下group by表达式:

没有分组情况下平均值如上所示。还可以使用表达式来动态确定组:

在这种情况下,得到2组,一组大于60的行,一组小于60的行。因此两组的名称为“true”(>60)或“false”(<60)。可以使用任何表达式自行计算这些组。

上面的例子中,我们看下90分和其他分数的人数。不需要再SELECT子句中列出分组条件。当然也可以使用完整的SQL:

再看下执行计划:

另外,HAVING子句中可以使用别名码?

显然是不行的,需要显式使用整个表达式。并且也可以使用不同聚合函数:

这就是group by表达式。

免责声明:凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处本网。非本网作品均来自其他媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如您发现有任何侵权内容,请依照下方联系方式进行沟通,我们将第一时间进行处理。

0赞 好资讯,需要你的鼓励
来自:yzsDBA
0

参与评论

登录后参与讨论 0/1000

为你推荐

加载中...