2016-07-25 24 views
0

我有一个像下面这样的表。我正在尝试计数不重复的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

回答

1

如果你想计数可能是

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 
+0

什么是COUNT(*)和count(ID)之间有什么不同?你可以解释一下,如果你不介意我问吗? – AVK

+0

大部分是相同的,只有当ID为空时,它才会被计数。 – Kostya

+1

@AVKNaidu这个链接可以帮助你https://www.percona.com/blog/2007/04/10/count-vs-countcol/ ..本质上数(*)计数满足where条件的行数,count (ID)计数与ID(非空),满足条件 – scaisEdge

-2

侯这个你做一个循环,一个临时表?:

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