在子查询中分组BY

时间:2016-08-05 14:12:14

标签: sql-server ms-access

我正在尝试在按用户标识分组的子查询中选择一个计数,不幸的是,用户标识必须在选择部分中,并且在这样做之后,子查询返回多个值。

我有两个表:包含UserID列和更多列的用户,包含UserID列的消息(我根据此列加入两个表),MessageRead是我想要按用户计算的字段。< / p>

我的疑问是:

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;

谢谢!

1 个答案:

答案 0 :(得分: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 JOIN将返回0消息的用户。如果要排除这些,请将其更改为INNER JOIN。