2013-07-20 2 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 Would принес мне следующие строки

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

Мой текущий оленья кожа запрос действительно Gurantee, что он будет искать u в столбец статуса. Это можно сделать? Если да, то как?

ответ

1

MAX() будет работать над этим, так как r - наименьшее значение, основанное на лексикографическом порядке.

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

следующий вопрос: есть ли другие значения статуса? если да, то какой будет выход, если нет статуса для 'u' и' r'? –

+0

Фактические значения ah well являются 'read' и' unread'. Похож на хороший трюк. нужно проверить – Samiron

+0

о спасателя жизни с таким простейшим решением .. Thnx миллион ... – Samiron

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