统计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对不起,我的浏览器有点奇怪!