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

时间:2020-09-20 12:30:06

标签: sql string postgresql count window-functions

我有一个雇员数据表,我想在数据库中获取多少个同名雇员。名称信息另存为first_name和last_name。我已经尝试过了。

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

获取错误。

2 个答案:

答案 0 :(得分:0)

您的SQL缺少一些括号(括号),并且要使用聚合函数和非聚合列,您必须在GROUP BY

中包括非聚合列

因此您的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中包含一个空字符串有点奇怪。同样作为一种简短形式,如果您不想在GROUP BY中重复使用concat,则可以将其替换为列序号(在本例中为2),使其变为:

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

答案 1 :(得分:0)

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

select first_name, last_name, count(*) cnt
from xyz
group by first_name, last_name

这给您每个姓氏/姓氏元组一行,并带有总数。注意没有连接变量的地方。 group by可以操作列元组。

另一方面,也许您想要整个员工行,并且需要另外一列来保存具有相同名称的其他行的总数。如果是这样,您可以使用窗口计数而不是聚合:

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