1

我在使用 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“唯一”ComponentId 的数量。因此上述数据的结果将是:5(链 1 中的 2 个唯一组件 ID 和链 2 中的 2 个唯一组件 ID,具有 2 个不同的 TransmitId ==> NULL 值不计算在内)

这是相当复杂的,不知道如何从这个查询开始。

有人可以帮忙吗?

提前致谢。

4

3 回答 3

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
于 2012-05-09T09:45:57.797 回答
2

添加 where TransmitEndpointId is not nullor 你会得到一个 0 因为 NULL

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

在此处输入图像描述

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

在此处输入图像描述

于 2012-05-09T10:00:08.093 回答
0

我想这就是你想要的

请尝试此代码

SELECT COUNT(DISTINCT ChainId,ComponentId,TransmitEndpointId)
FROM your_table
WHERE TransmitEndpointId IS NOT NULL
于 2012-05-09T11:05:46.660 回答