2016-08-05 5 views
0

ユーザIDでグループ化されたサブクエリ内のカウントを選択しようとしています。残念ながら、ユーザIDは選択部分になければなりません。サブクエリはそれ以上の値を返します。サブクエリ内のグループBY

私は2つのテーブルを持っています:UserID列以上の列、UserID列を含むメッセージ(この列に基づいて2つの表を結合しています)、MessageReadはユーザーごとに数えたいフィールドです。

私のクエリはこれです:

SELECT Users.UserID, (SELECT COUNT(MessageRead) 
         FROM Messages 
         group by Messages.UserID) as d 
from Messages 
right JOIN Users ON Users.UserID=Messages.UserID group by Users.UserID; 

感謝!

+0

私はサブクエリで必要なのは... Users.UserID = Messages.UserIDのメッセージだから、Messages.UserIDでグループを削除することもできます。 1人のユーザーを選択する – Cato

答えて

3

MessageReadフィールドのタイプがわかりません。私はそれがブール値だと思っていて、読み込まれたメッセージの数を取得したいのですか?

このクエリは、ユーザーのすべてのメッセージの数を取得します。

SELECT u.UserID, COUNT(m.MessageID) FROM Users u LEFT JOIN Messages m on m.UserID = u.UserID GROUP BY u.UserID

あなたが読んでいるメッセージだけをしたい場合は、WHERE句を追加してみてください。

SELECT u.UserID, COUNT(m.MessageID) FROM Users u LEFT JOIN Messages m on m.UserID = u.UserID WHERE m.MessageRead = 1 GROUP BY u.UserID

LEFTは、このクエリに参加0メッセージをユーザーに返します。除外する場合は、INNER JOINに変更してください。