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

0 sql t-sql sql-server join window-functions

我已经在各种网站上阅读了有关该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
Run Code Online (Sandbox Code Playgroud)

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

测试台

GMB*_*GMB 5

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

select t.*, count(*) over(partition by name) n_showsup
from mytable t
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

  • @ed2020。。。窗函数是这个问题的最佳答案,应该被接受。 (3认同)
  • @ed2020 作为“已接受答案”的接收者,我同意戈登的观点。我想提供我的答案作为垫脚石,因为你的尝试朝着正确的方向前进。但最终,Windows 函数方法对系统资源的占用要轻得多,因为它涉及中间结果集和连接,与窗口函数路径相比,这只是多余的 CPU 和 RAM 使用。 (2认同)