我遇到了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值不计算)
这非常复杂,并且不知道如何从这个查询开始。
有人可以帮忙吗?
提前致谢。
答案 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
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
)
答案 2 :(得分:0)
我认为这就是你想要的
请尝试此代码
SELECT COUNT(DISTINCT ChainId,ComponentId,TransmitEndpointId)
FROM your_table
WHERE TransmitEndpointId IS NOT NULL