SQL 中的 countif 类型函数,其中可以在其他列中检索总计数
countif type function in SQL where total count could be retrieved in other column
我在 table 中有 36 列,但其中一列有多次数据,如下所示
ID Name Ref
abcd john doe 123
1234 martina 100
123x brittany 123
ab12 joe 101
我想要
这样的结果
ID Name Ref cnt
abcd john doe 123 2
1234 martina 100 1
123x brittany 123 2
ab12 joe 101 1
因为 123 出现了两次,我希望它在 cnt 列中显示 2 等等
您应该提供 SQL 品牌了解功能:
1) 如果你的数据库支持 window functions:
Select
*,
count(*) over ( partition by ref ) as cnt
from your_table
2) 如果不是:
Select
T.*, G.cnt
from
( select * from your_table ) T inner join
( select count(*) as cnt from your_table group by ref ) G
on T.ref = G.ref
select ID, Name, Ref, (select count(ID) from [table] where Ref = A.Ref)
from [table] A
编辑:
正如下面评论中提到的,这种方法可能不是在所有情况下都是最有效的,但在相当小的 tables 上应该足够了。
在我的测试中:
- 5,460 条记录中的 table 和 976 个不同的 'Ref' 值在不到 1 秒内返回。
- 600,831 条记录的 table 和 8,335 个不同的 'Ref' 值在 6 秒内返回。
- 在 13 秒内返回了 table 的 845,218 条记录和 15,147 个不同的 'Ref' 值。
您可以在以下情况下将 COUNT
与 OVER
一起使用:
查询
select ID,
Name,
ref,
count(ref) over (partition by ref) cnt
from #t t
示例数据
create table #t
(
ID NVARCHAR(400),
Name NVARCHAR(400),
Ref INT
)
insert into #t values
('abcd','john doe', 123),
('1234','martina', 100),
('123x','brittany', 123),
('ab12','joe', 101)
我在 table 中有 36 列,但其中一列有多次数据,如下所示
ID Name Ref
abcd john doe 123
1234 martina 100
123x brittany 123
ab12 joe 101
我想要
这样的结果ID Name Ref cnt
abcd john doe 123 2
1234 martina 100 1
123x brittany 123 2
ab12 joe 101 1
因为 123 出现了两次,我希望它在 cnt 列中显示 2 等等
您应该提供 SQL 品牌了解功能:
1) 如果你的数据库支持 window functions:
Select
*,
count(*) over ( partition by ref ) as cnt
from your_table
2) 如果不是:
Select
T.*, G.cnt
from
( select * from your_table ) T inner join
( select count(*) as cnt from your_table group by ref ) G
on T.ref = G.ref
select ID, Name, Ref, (select count(ID) from [table] where Ref = A.Ref)
from [table] A
编辑: 正如下面评论中提到的,这种方法可能不是在所有情况下都是最有效的,但在相当小的 tables 上应该足够了。
在我的测试中:
- 5,460 条记录中的 table 和 976 个不同的 'Ref' 值在不到 1 秒内返回。
- 600,831 条记录的 table 和 8,335 个不同的 'Ref' 值在 6 秒内返回。
- 在 13 秒内返回了 table 的 845,218 条记录和 15,147 个不同的 'Ref' 值。
您可以在以下情况下将 COUNT
与 OVER
一起使用:
查询
select ID,
Name,
ref,
count(ref) over (partition by ref) cnt
from #t t
示例数据
create table #t
(
ID NVARCHAR(400),
Name NVARCHAR(400),
Ref INT
)
insert into #t values
('abcd','john doe', 123),
('1234','martina', 100),
('123x','brittany', 123),
('ab12','joe', 101)