在Sql查询中应用Group by的逻辑



我在问一个非常初级的问题,但每当我想使用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

相关内容

  • 没有找到相关文章

最新更新