我正在尝试在按用户标识分组的子查询中选择一个计数,不幸的是,用户标识必须在选择部分中,并且在这样做之后,子查询返回多个值。
我有两个表:包含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;
谢谢!
答案 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。