mysql - 需要递归逻辑的 SQL 查询

标签 mysql sql

我有一个 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是同一组设备登录的,则放在一起。例如,如下图,用户帐号ab在设备上登录 123 ,所以 ab在同一组。而用户帐号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/

相关文章:

MySQL:如何将 "1 h 15 min"之类的字符串转换为 75?

mysql - 计算mysql中多列的最小值

php - 使用更新表集使用 PHP 更新表失败

sql - Access VBA 字符串以根据匹配条件返回最小和最大日期

sql - 简化用于列出表和索引大小的 Postgresql 查询?

SQL Server XQuery 语法错误

php - mySQL inner join with where条件不起作用

php - 多个用户的在线状态

sql - 在一对一关系中插入

mysql - 是否可以将结果列名作为行值进行查询?