SQL查询不同 - 分组依据

时间:2012-05-09 09:39:19

标签: sql

我遇到了SQL查询问题。

我有下表(我简化了一下):

 ChainId    ComponentId    TransmitEndpointId
   1            156               NULL
   1            156               7
   1            157               7
   2            510               6
   2            510               6
   2            511               6
   2            511               8

我需要做的是在“唯一”ChainId中获取TransmitEndpointId的foreach'unique'ComponentId的数量。 因此,上述数据的结果将是:5(链1中的2个唯一componentId和链2中的2个唯一componentId具有2个不同的TransmitId ==> NULL值不计算)

这非常复杂,并且不知道如何从这个查询开始。

有人可以帮忙吗?

提前致谢。

3 个答案:

答案 0 :(得分:2)

这将为您提供每个ChainID / ComponentId组合的唯一计数。

SELECT ChainId,
       ComponentId,
       count(distinct TransmitEndpointId)
FROM your_table
GROUP BY ChainId, ComponentId

现在,您可以在派生表中使用它来获取总计数:

SELECT sum(distinct_count)
FROM  (
  SELECT ChainId,
         ComponentId,
         count(distinct TransmitEndpointId) as distinct_count
  FROM your_table
  GROUP BY ChainId, ComponentId
) t

答案 1 :(得分:2)

添加where TransmitEndpointId is not null或者因为NULL

而得到0
SELECT ChainId,
       ComponentId,
       count(distinct TransmitEndpointId)
FROM chain
where TransmitEndpointId is not null
GROUP BY ChainId, ComponentId

select sum(endPointNr) from 
(
SELECT count(distinct TransmitEndpointId) as     endPointNr
FROM chain
where TransmitEndpointId is not null
GROUP BY ChainId, ComponentId
) X

enter image description here

编辑(为什么要添加TransmitEndpointId is not null

enter image description here

答案 2 :(得分:0)

我认为这就是你想要的

请尝试此代码

SELECT COUNT(DISTINCT ChainId,ComponentId,TransmitEndpointId)
FROM your_table
WHERE TransmitEndpointId IS NOT NULL