ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

在MySQL中将相邻的相似行分组

2019-10-10 03:21:05  阅读:9  来源: 互联网

标签:sql mysql group-by



我不知道如何很好地解释这一点,所以请忍受我.

我试图对彼此相邻的相似行进行分组,如果相同,则基本上忽略第n个行.我不确定这在MySQL中是否容易实现.这些行除了描述外没有其他属性.如果还有其他不重复的“描述”,我仍然希望将它们返回.

我有一张桌子,上面满是这样的条目:

+--+-------------------------+
|id|description              |
+--+-------------------------+
| 1|hello                    |
+--+-------------------------+
| 2|foobar                   |  \_   Condense these into one row
+--+-------------------------+  /
| 3|foobar                   |
+--+-------------------------+
| 4|hello                    |
+--+-------------------------+
| 5|world                    |  \__   Condense these into a row
+--+-------------------------+  /
| 6|world                    |
+--+-------------------------+
| 7|puppies                  |
+--+-------------------------+
| 8|kittens                  |  \__   These too...
+--+-------------------------+  /
| 9|kittens                  |
+--+-------------------------+
|10|sloths                   |
+--+-------------------------+
|11|kittens                  |
+--+-------------------------+

解决方法:

您可以使用巧妙的技巧来做到这一点.诀窍是计算一个特定ID之前的描述的数量,该描述与该ID的描述不同.对于序列中的值,此数字将相同.

在MySQL中,您可以使用相关子查询来进行此计数.其余的只是按此字段分组以将值组合在一起:

select min(id) as id, description, count(*) as numCondensed
from (select t.*,
             (select count(*)
              from table t2
              where t2.id <= t.id and t2.description <> t.description
             ) as grp
      from table t
     ) t
group by description, grp;


标签:sql,mysql,group-by

专注分享技术,共同学习,共同进步。侵权联系[admin#icode9.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有