我有一个雇员数据表,我想在数据库中获取多少个同名雇员。名称信息另存为first_name和last_name。我已经尝试过了。
Select count(concat(first_name,'',last_name) as empname, (concat(first_name,'',last_name) as empname from xyz.
获取错误。
答案 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