通过组合它们来减少结果

时间:2017-10-12 20:19:25

标签: mysql sql select

我有一个表格,其中包含以下信息,这些信息是通过与其他表格的几个连接生成的,但没有显示唯一ID:

id | username | blocked | online
 2 | The_Boss |    0    |   0 
 2 | The_Boss |    0    |   0 
 3 | The_Dude |    1    |   1 
 3 | The_Dude |    0    |   0 

我想提供以下结果:

id | username | blocked | online
 2 | The_Boss |    0    |   0 
 3 | The_Dude |    1    |   1 

id是与用户名匹配的用户标识。基本上我需要做的是生成一个在线/离线用户列表,因为用户有多个不同的在线记录,具体取决于他在线的页面的不同部分。无论如何,如果用户在任何部分在线,我希望online=1的行优先于offline = 0,但每个用户ID应该是唯一的。因此,在更大的范围内,它看起来像:

id | username | blocked | online
 2 | The_Boss |    0    |   0 
 2 | The_Boss |    0    |   0 
 2 | The_Boss |    0    |   0 
 3 | The_Dude |    1    |   1 
 3 | The_Dude |    0    |   0 
 3 | The_Dude |    1    |   1 
 4 | The_Kind |    0    |   0 
 4 | The_Kind |    0    |   0 
 4 | The_Kind |    0    |   0
 4 | The_Kind |    0    |   0
 5 | The_Mann |    0    |   0
 5 | The_Mann |    0    |   1 

返回:

 id | username | blocked | online
 2 | The_Boss |    0    |   0 
 3 | The_Dude |    1    |   1 
 4 | The_Kind |    0    |   0
 5 | The_Mann |    0    |   1 

2 个答案:

答案 0 :(得分:1)

您可以按用户ID和名称对结果进行分组,并采用最大状态:

SELECT   id, username, MAX(blocked), MAX(online)
FROM     mytable
GROUP BY id, username

答案 1 :(得分:0)

似乎你需要不同的值

SELECT   distinct  username, blocked, online
from your_table 
order by username, blocked  desc, online