统计PostgreSQL中数据库中存在多少同名员工

统计PostgreSQL中数据库中存在多少同名员工,sql,string,postgresql,count,window-functions,Sql,String,Postgresql,Count,Window Functions,我有一个员工数据表,我想得到数据库中有多少同名员工。姓名信息保存为名和姓。我试过了 Select count(concat(first_name,'',last_name) as empname, (concat(first_name,'',last_name) as empname from xyz. 获取错误。您的SQL缺少一些括号(方括号),若要使用聚合函数和非聚合列,您必须将非聚合列包含在分组中 因此,您的SQL应该如下所示: Select count(concat(first_nam

我有一个员工数据表,我想得到数据库中有多少同名员工。姓名信息保存为名和姓。我试过了

Select count(concat(first_name,'',last_name) as empname, (concat(first_name,'',last_name) as empname from xyz.

获取错误。

您的SQL缺少一些括号(方括号),若要使用聚合函数和非聚合列,您必须将非聚合列包含在
分组中

因此,您的SQL应该如下所示:

Select count(concat(first_name,' ',last_name)) as countempname, 
(concat(first_name,' ',last_name)) as empname 
from xyz
GROUP BY (concat(first_name,' ',last_name));
还要注意,我添加了一个空格。在concat中包含一个空字符串有点奇怪。同样作为一种简写形式,如果您不想重复
组中的concat BY
,您可以将其替换为列序号(在本例中为2),使其成为:

Select count(concat(first_name,' ',last_name)) as countempname, 
(concat(first_name,' ',last_name)) as empname 
from xyz    
GROUP BY 2;

如果要计算每个名/姓元组在表中出现的次数,可以使用聚合:

select first_name, last_name, count(*) cnt
from xyz
group by first_name, last_name
select x.*, count(*) over(partiton by first_name, last_name) cnt
from xyz
这将为每个名/姓元组提供一行,以及总计数。注意,没有连接变量的点<代码>分组依据
可以对列元组进行操作

另一方面,您可能需要整个employee行,以及一个额外的列,该列保存具有相同名称的其他行的总数。如果是这样,您可以使用窗口计数而不是聚合:

select first_name, last_name, count(*) cnt
from xyz
group by first_name, last_name
select x.*, count(*) over(partiton by first_name, last_name) cnt
from xyz

你犯了什么错误?@GMB对不起,我的浏览器有点奇怪!