小编典典

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

sql

我不知道如何很好地解释这一点,所以请多多包涵。

我试图对彼此相邻的相似行进行分组,如果相同,则基本上忽略第n +
1行。我不确定这在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                  |
+--+-------------------------+

阅读 235

收藏
2021-04-07

共1个答案

小编典典

您可以使用巧妙的技巧来做到这一点。诀窍是计算与特定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;
2021-04-07