我有一个 MySQL
表,它有 2 列记录用户的登录信息:
User_id Device_id
a 123
b 123
b 321
d 321
e aaa
f ccc
g cba
h aaa
h ccc
i cba
i aaa
现在我想添加一列
Group
: 如果user_id是同一组设备登录的,则放在一起。例如,如下图,用户帐号a
和 b
在设备上登录 123
,所以 a
和 b
在同一组。而用户帐号b
也在设备上登录 321
,然后所有帐号都是321
登录的应该加入这个群:
User_id Device_id Group
a 123 1
b 123 1
b 321 1
d 321 1
e aaa 2
f ccc 2
g cba 2
h aaa 2
h ccc 2
i cba 2
i aaa 2
这不能简单地处理
group by
那么如何使用SQL来表达列Group
?
最佳答案
您可以使用以下查询,
//为将来插入
插入表名
VALUES (j, '123', CASE 分组
WHEN (SELECT count() FROM tableName tn WHERE tn.Device_id='123')=0 THEN (SELECT MAX(tn.grouping)+1 FROM tableName tn)
WHEN (SELECT count() FROM tableName tn WHERE tn.Device_id='123')>0 THEN (SELECT tn.grouping FROM tableName tn WHERE tn.Device_id='123')
结尾
);
//更新现有数据
更新表名
设置分组 = CASE 分组
WHEN (SELECT count() FROM tableName tn WHERE tn.Device_id='123')=0 THEN (SELECT MAX(tn.grouping)+1 FROM tableName tn)
WHEN (SELECT count() FROM tableName tn WHERE tn.Device_id='123')>0 THEN (SELECT tn.grouping FROM tableName tn WHERE tn.Device_id='123')
结尾;
关于mysql - 需要递归逻辑的 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57950988/