将它们组合
问题描述:
减少的结果我有一个通过几个生成以下信息的表没有唯一的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 | 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
答
你可以组的结果通过用户ID和姓名,并采取最高状态:
SELECT id, username, MAX(blocked), MAX(online)
FROM mytable
GROUP BY id, username
答
似乎你需要不同的值
SELECT distinct username, blocked, online
from your_table
order by username, blocked desc, online