1

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

|----|---------|--------------|------|
| 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在状态列中查找 a。那有可能吗?如果有怎么办?

4

1 回答 1

1

MAX()将对此进行处理,因为r它是基于字典顺序的最小值。

SELECT  user_ID,
        MAX(status) status,
        COUNT(*) totalMsg
FROM    messages
GROUP   BY user_ID
于 2013-07-20T15:36:01.627 回答