在分组的mysql查询上创建动态列

时间:2018-02-12 16:19:21

标签: mysql sql

我在mysql中有以下表格

2018-02-12 12:17:30.394  INFO 88028 --- [      xxx-0-C-1] o.s.k.l.KafkaMessageListenerContainer    
: partitions revoked: [kbgh290-0]
2018-02-12 12:17:30.450  INFO 88028 --- [      xxx-0-C-1] o.s.k.l.KafkaMessageListenerContainer    
: partitions assigned: [kbgh290-0, kbghNew-0]

我想要一个查询,它会显示按thread_id分组的所有邮件,如果它们包含任何未读邮件,我想要一个名为read_status的列显示未读

所以查询结果如下所示:

msg_id | thread_id | read_status
--------------------------------
1      | 1         | read
2      | 1         | read
3      | 2         | unread
4      | 2         | read
5      | 2         | read
6      | 3         | read
7      | 3         | unread

到目前为止,我有:

thread_id | read_status
-----------------------
1         | read
2         | unread
3         | unread

但这会填充" read_status"与第一条消息无关的结果,而不是任何消息未读...

我不知道怎么做,有人可以帮忙吗?

提前致谢

1 个答案:

答案 0 :(得分:3)

您需要汇总,例如:

select thread_id, 
       (case when sum(user_read_status = 'U') > 0 then 'unread' else 'read' end) as thread_status
from messages
group by thread_id;

如果邮件状态确实是“已读”和“未读”(如示例数据中所示),您可以使用此快捷方式:

select thread_id, max(message_status) as thread_status
from messages
group by thread_id;

这只能起作用,因为你有两种状态,字母顺序有意义。