2016-08-05 187 views
0

我想在按用戶ID分組的子查詢中選擇一個計數,不幸的是用戶標識必須位於選擇部分,並且在這樣做之後,子查詢返回多於一個值。GROUP 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

在我看來,你在子查詢中需要的全部是...從MESSAGES WHERE Users.UserID = Messages.UserID,然後你也可以通過Messages.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

如果你想只被讀取郵件,嘗試添加一個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。