我问的是一个非常初学者的问题,但每当我想使用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查询::
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查询是正确的因为它返回了一个微软说here
其实我和Group by混淆了。请明确我的观点。
答案 0 :(得分:1)
您希望将MessageGroup包含在select中,如下所示:
select MessageGroup, count(*)
from tblMessage
where SenderId=2
group by MessageGroup
答案 1 :(得分:1)
当您使用GroupBy时,Group By Clause组中的任何列都应该在Select Clause中
select MessageGroup,count(MessageGroup)from tblMessage
where SenderId=2
group by MessageGroup