我在问一个非常初级的问题,但每当我想使用Group by的聚合函数时,我总是感到困惑。实际上我得到了正确的结果,但我不太确定小组是如何在这里工作的。我的要求是获得基于MessageGroup列的已发送项目的计数。
MessageId SenderId MessageGroup Message
_____________________________________________________________________________
1 2 67217969-e03d-41ec-863e-659ca26e660f Hi
2 2 67217969-e03d-41ec-863e-659ca26e660f Hello
3 2 67217969-e03d-41ec-863e-659ca26e660f bye
4 1 c45dc414-9320-40a5-8f8f-9c960d6deffe TC
5 1 8486d16b-294b-45a5-8674-e7024e55f39b shutup
实际上我想要得到发送消息的计数。这里SenderId=2已经向某人发送了三条消息,但我想显示一个计数,所以我使用了MessageGroup,我正在做Groupby并获得计数。
我已经使用了Linq query::
return DB.tblMessage.Where(m => m.SenderId == 2 ).GroupBy(m => m.MessageGroup).Count();
返回"1",这是正确的,我想在发送的消息中显示(1)。
但是如果我尝试在SQL Server中查询上述内容,它返回3
下面是我的SQL查询:
select count(*)
from tblMessage
where SenderId = 2
group by MessageGroup
Linq查询是正确的,因为它返回给我一个微软说在这里
实际上我对Group by感到困惑。
当您使用GroupBy时,GroupBy子句中出现的列应该在Select子句
select MessageGroup,count(MessageGroup)from tblMessage
where SenderId=2
group by MessageGroup
您希望将MessageGroup作为select的一部分,如下所示:
select MessageGroup, count(*)
from tblMessage
where SenderId=2
group by MessageGroup