【发布时间】:2012-10-03 18:50:18
【问题描述】:
我有 3 张桌子:
[Users]: UserId, Name...[Topics]: TopicId, CreatorUserId...-
[Comments]: CommentId, TopicId...。
现在,我想根据这个机制选择最热门话题的创建者: 获取比指定日期更新的 cmets。按主题的创建者对这些 cmets 进行分组,并按组中的行数排序。
但是,我不确定我的查询是否遵循这个逻辑(根据结果似乎,但我只有几个用户和主题),但主要问题是当我要选择的名称时用户 (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
谢谢你帮助我。
编辑:我已经复制了原始错误消息。我需要从 User 中选择 Email、City 等列,所以我不确定将所有这些添加到 group by 子句是最好的解决方案。
【问题讨论】:
-
错误和 SQL 不匹配 - 您确定错误与
Users.Name列无关吗? -
您还必须对 Users.Name 进行分组,这可以解释您遇到的错误,即使错误文本与您的查询内容不匹配。
标签: sql sql-server-2008