需要帮助编写一个SQL查询来计算非重复行(不是一个明确的计数)
问题描述:
我有一个像下面这样的表。我正在尝试计数不重复的ID。我不是指一个明确的数字。不同的计数会返回7(a,b,c,d,e,f,g)的结果。我希望它返回4(a,c,d,f)的计数。这些是没有多个类型代码的ID。我已经尝试了以下查询,但计数为0(结果应该是数以百万计)。需要帮助编写一个SQL查询来计算非重复行(不是一个明确的计数)
select ID, count (ID) as number
from table
group by ID
having count (ID) = 1
Select count (distinct ID)
From table
Having count (ID) = 1
ID|type code
a|111
b|222
b|333
c|444
d|222
e|111
e|333
e|555
f|444
g|333
g|444
感谢@scaisEdge!你提供的第一个查询在上面的问题中给了我确切的内容。现在已经知道我的领导已经要求它进一步展示单个类型代码中有多少次ID的计数。例如,我们想看到
类型代码|计数 111 | 1 222 | 1 444 | 2
它有444单一类型的码的ID的2个实例(C,F) ,有一个ID的实例具有单一类型代码111(a)和222(d)。我试着修改查询本身,而是从( 选择CONT_ID从 imdmadmp.contequiv 组由CONT_ID 运行查询时
SELECT COUNT(admin_sys_tp_cd)的数量 具有计数(已跨越未来的错误*)= 1)T 组由admin_sys_tp_cd
答
如果你想计数可能是
select count(*) from (
select id from
my_table
group by id
having count(*) =1
) t
,如果你想在ID
select id from
my_table
group by id
having count(*) =1
答
侯这个你做一个循环,一个临时表?:
select
*
into #control
from tablename
declare @acum as int
declare @code as char(3)
declare @id as char(1)
declare @id2 as int
select @acum=0
while exists (select* from #control)
begin
select @code = (select top 1 code from #control order by id)
select @id = (select top 1 id from #control order by id)
select @id2 =count(id) from #control where id in (select id from tablename where id = @id and code <> @code)
if @id2=0
begin
select @acum = @acum+1
end
delete #control
where id = @id --and code = @code
end
drop table #control
print @acum
什么是COUNT(*)和count(ID)之间有什么不同?你可以解释一下,如果你不介意我问吗? – AVK
大部分是相同的,只有当ID为空时,它才会被计数。 – Kostya
@AVKNaidu这个链接可以帮助你https://www.percona.com/blog/2007/04/10/count-vs-countcol/ ..本质上数(*)计数满足where条件的行数,count (ID)计数与ID(非空),满足条件 – scaisEdge