繁体   English   中英

Count() 一个名字与其余信息一起出现在表格中的次数

[英]Count() how many times a name shows up in a table with the rest of info

我已经在各种网站上阅读了有关count()函数的内容,但我仍然无法完成这项工作。

我用(id、name、last name、age)做了一个小表,我需要检索所有列加上一个新列。 在这个新列中,我想显示名称在表格中出现或重复的次数。

我已经进行了测试,但只能检索带有计数列的 COLUMN NAME,但我无法从表中检索所有数据。

目前我有这个

   select a.n_showsup, p.*
   from [test1].[dbo].[person] p,
   (select count(*) n_showsup
    from [test1].[dbo].[person])a

这给了我关于输出的所有数据,但在 n_showsup 列上,它只给了我行数,现在我知道这是因为我缺少一个 GROUP BY 但是当我写 group by NAME 时,它向我显示了很多记录。 这是我需要的一个例子:

测试台

您可以使用窗口函数,如果您的 RDBMS 支持它们:

select t.*, count(*) over(partition by name) n_showsup
from mytable t

或者,您可以使用聚合查询连接该表,该查询计算每个名称的出现次数:

select t.*, x.n_showsup
from mytable t
inner join (select name, count(*) n_showsup from mytable group by name) x
    on x.name = t.name

虽然窗口函数方法(@GMB 的答案)是正确的方法,但从子查询方法(就像您正朝着的方向)思考这个问题看起来像:

select p.*, a.n_showsup
from [test1].[dbo].[person] p
INNER JOIN (
    select name, count(*) n_showsup
    from [test1].[dbo].[person]
    GROUP BY name
) a ON p.name = a.name

这与您所拥有的非常接近,不同之处在于我们按name对该子查询进行分组(因此我们可以按名称进行计数),并且我们可以在连接条件中使用它,我们可以在INNER JOINON子句中使用它。

你真的不应该在你的FROM子句中使用逗号。 而是使用JOIN

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM