2016-08-05 2 views
0

Я пытаюсь выбрать счет внутри подзапроса, который сгруппирован по идентификатору пользователя, к сожалению, идентификатор пользователя должен быть в части выбора, и после этого подзапрос возвращает более одного значения.Группа BY внутри подзапроса

У меня есть две таблицы: пользователи, содержащие столбец UserID и другие столбцы, сообщения, содержащие столбец UserID (я присоединяюсь к двум таблицам на основе этого столбца), 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

Мне кажется, что все, что вам нужно в подзапросе, это ... FROM MESSAGES WHERE Users.UserID = Messages.UserID, и вы также можете удалить группу с помощью Message.UserID, поскольку она не будет иметь никакой цели, если вы только выбор для одного пользователя – 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

Если вы хотите только те сообщения, которые читаются, попробуйте добавить ИНЕКЕ.

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

ЛЕВАЯ JOIN в запросе будет возвращать пользователям 0 сообщений. Если вы хотите исключить их, измените их на INNER JOIN.

Смежные вопросы