mysql group by select with condition value

时间:2013-07-20 15:34:18

标签: php mysql sql group-by

在我的消息表中,我有以下行,例如

|----|---------|--------------|------|
| 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 个答案:

答案 0 :(得分:1)

MAX()将对此起作用,因为r是基于字典顺序的最小值。

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