Count Aggregate Dot Count语法(.count) [英] Count Aggregate Dot Count Syntax (.count)

查看:20
本文介绍了Count Aggregate Dot Count语法(.count)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

今天早上,当我意外地在CTE中引用了一个不存在的"count"列时,我遇到了一个我认为奇怪的错误。Postgres正在寻找GROUP BY子句,尽管我认为我不是在做聚合。再试一试,就会发现Table.count等同于一个count star函数。请考虑以下事项:

SELECT
    c.clinic_id,
    c.count,
    count(*) as count_star
FROM clinic_member c
GROUP BY 
 c.clinic_id
ORDER BY clinic_id;

这将在我的数据集中生成如下所示的结果:

我很想了解实际的postgres语法规则是什么,于是尝试在文档中搜索对该语法的引用,但什么也找不到;只是找到了大量关于count(*)的文档。谁能解释一下这是否是有效的SQL,以及是否有其他聚合函数也可以类似地调用?如果有到Postgres文档的链接,那就太棒了。

注意。这是在Postgres 9.5.9上的

推荐答案

它是有效的postgres语法,因为在postgres中,具有与表类型匹配的单个参数的函数可以通过两种不同的方式进行调用:

假设表名foo和名为some_function的函数具有类型为foo的单个参数,则以下内容:

select some_function(f)
from foo f;

相当于

select f.some_function
from foo f;

别名实际上不是必需的:

select foo.some_function
from foo;

这是postgres"面向对象"结构的结果。

count()可以接受任何参数-包括行引用(=记录),因此

select count(f)
from foo f;

相当于

select f.count
from foo f;

这在手册中关于Function Calls的章节中有说明:

接受复合类型单个参数的函数可以选择使用字段选择语法进行调用,反之,可以用函数风格编写字段选择。也就是说,COL(TABLE)和TABLE.COL这两个符号可以互换。这种行为不是SQL标准的,但在PostgreSQL中提供,因为它允许使用函数来模拟"计算字段"。有关详细信息,请参阅Section 8.16.5.

这篇关于Count Aggregate Dot Count语法(.count)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆