我有 3 张桌子:
[Users]: UserId, Name...
[Topics]: TopicId, CreatorUserId...
[Comments]: CommentId, TopicId...
.
现在,我想根据这个机制选择最热门话题的创建者:获取比指定日期更新的评论。按主题的创建者对这些评论进行分组,并按组中的行数排序。
但是,我不确定我的查询是否遵循这个逻辑(根据结果似乎,但我只有几个用户和主题),但主要问题是当我要选择用户的名称时(Users.Name
) ,我得到一个错误:
列 '[TestDatabase].[dbo].[Users].[Name]' 在选择列表中无效,因为它不包含在聚合函数或 GROUP BY 子句中。
T-SQL 查询:
SELECT
Users.UserId, Users.Name, COUNT(Users.UserId) as RowCountInGroup
FROM [TestDatabase].[dbo].[Users]
INNER JOIN [TestDatabase].[dbo].[Topics] ON Topics.CreatorUserId = Users.UserId
INNER JOIN [TestDatabase].[dbo].[Comments] ON Comments.TopicId = Topics.TopicId
WHERE
Comments.CreationDate > CAST('14 SEPTEMBER 2012' as DateTime)
GROUP BY Users.UserId
ORDER BY RowCountInGroup DESC
谢谢你帮助我。
编辑:我已经复制了原始错误消息。我需要从用户中选择电子邮件、城市等列,所以我不确定将所有这些添加到group by
子句中是最好的解决方案。