0

我需要计算一列中重复项的数量,这样可以工作:

SELECT CorrelationId, Count(CorrelationId) as total
FROM VoipDetailsView
WHERE ResponseCode = 200
GROUP BY CorrelationId

但是,当我尝试将其他列添加到结果中时

SELECT SessionIdTime, CorrelationId, Count(CorrelationId) as total
FROM VoipDetailsView
WHERE ResponseCode = 200
GROUP BY CorrelationId, SessionIdTime
ORDER BY SessionIdTime 

所有计数现在都是 0 或 1,即使(或可能是因为)现在正在显示重复值。我不介意重复,但我需要最后一列包含每个选定的重复 CorrelationIds 的总数。(例如,如果该值存在两次,则这两行的计数均为 2)

我需要什么样的查询才能做到这一点?

4

3 回答 3

0

SessionIdTime在列上使用聚合函数怎么样min()

SELECT min(SessionIdTime), CorrelationId, Count(CorrelationId) as total
FROM VoipDetailsView
WHERE ResponseCode = 200
GROUP BY CorrelationId
ORDER BY min(SessionIdTime)
于 2013-11-12T15:23:38.473 回答
0

您需要将 CorrelationId 的聚合分离到一个单独的查询中,并将其与您的表连接以获取其他列,例如:

SELECT v.SessionIdTime, v.CorrelationId, total
From VoipDetailsView v inner join
(SELECT CorrelationId, Count(CorrelationId) as total
FROM VoipDetailsView
WHERE ResponseCode = 200
GROUP BY CorrelationId) agg
on v.CorrelationId = agg.CorrelationId
于 2013-11-12T17:23:44.847 回答
0

您的第二个查询为您提供了特定 SessionIdTime 中重复 CorrelationId 的数量,这是您想要的吗?SessionIdTime 是什么意思?

顺便说一句,你可以这样做:

SELECT CorrelationId, Count(*) as total
FROM VoipDetailsView
WHERE ResponseCode = 200
GROUP BY CorrelationId;

它更优化了一些

于 2013-11-12T15:28:43.980 回答