使用SQL计算数据

时间:2016-08-03 21:21:39

标签: sql count having

我有一个像下面第一个表的表(抱歉,如果它没有正确显示,我是StackOverflow的新手并且还没有完全掌握如何在问题中显示表格)。我已经收到了帮助,计算了不重复的ID(我不是指一个明显的计数。一个不同的计数会返回7的结果(a,b,c,d,e,f,g)。我希望它返回4(a,c,d,f)的计数。这些是没有多个类型代码的ID。现在我需要更进一步,以显示类型代码中有多少次计数只有那个单一类型代码的ID。例如,我们希望看到类似下面第二个表的结果。有2个ID的实例具有单个类型代码444(c,f),有一个ID的实例具有单个类型代码111(a)和222(d)。

作为参考,让我获得只有一个类型代码的ID计数的查询是

select count(*) from
 (select id from 
  mytable 
  group by id 
  having count(*) =1) t


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

Type Code|Count
111|1
222|1
444|2

2 个答案:

答案 0 :(得分:1)

也许这就是你所要求的?

SELECT  [type code],
        COUNT(*) [count]
FROM    mytable
WHERE   [ID] IN ( SELECT    [ID]
                  FROM      mytable
                  GROUP BY  [ID]
                  HAVING COUNT([type code]) = 1)
GROUP BY [type code]

答案 1 :(得分:1)

您可以使用嵌套聚合解决此问题:

SELECT type_code, COUNT(*) 
FROM
 ( -- as this looks for a single row you can simply add the type code
   SELECT ID, MIN(type_code) as type_code
   FROM mytable
   GROUP BY  ID
   HAVING COUNT(*) = 1
 ) AS dt
GROUP BY type_code