2013-07-20 61 views
1

在我的郵件表我有以下行例如,mysql的組通過選擇與條件值

|----|---------|--------------|------| 
| id | user_id | message  |status| 
|====|=========|==============|======| 
| 1 | 2  | msgs 11  | r | 
|----|---------|--------------|------| 
| 2 | 3  | msgs 12  | r | 
|----|---------|--------------|------| 
| 3 | 2  | msgs 13  | r | 
|----|---------|--------------|------| 
| 4 | 3  | msgs 14  | u | 
|----|---------|--------------|------| 

現在,我需要知道兩件事情對每個user_id

  • 是否有任何狀態u或不是。
  • 多少消息是有

例如,像下面 select user_id, status, count(*) as totalMsg from messages group by user_id 查詢會帶給我以下行

| user_id | status| totalMsg | 
|=========|=======|==========| 
| 2  | r | 2  | 
|---------|-------|----------| 
| 3  | r | 2  | 
      ^
       |------> I need this value to be 'u' because user 3 has a message u 

我當前的查詢並不真正出示擔保,它將尋找一個u狀態欄。 這可能嗎?如果是這樣如何?

回答

1

MAX()將在此工作,因爲r是基於字典順序的最小值。

SELECT user_ID, 
     MAX(status) status, 
     COUNT(*) totalMsg 
FROM messages 
GROUP BY user_ID 
+0

後續問題:有沒有其他狀態值?如果是這樣,如果沒有'u'和'r'的狀態,輸出是什麼? –

+0

啊實際值是'read'和'unread'。看起來好戲。需要檢查 – Samiron

+0

哦救生員用這樣一個最簡單的解決方案.. Thnx一百萬... – Samiron