私は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
句に追加することが最善の解決策であるかどうかはわかりません。