首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于两列按相邻行分组

基于两列按相邻行分组
EN

Stack Overflow用户
提问于 2016-01-04 20:50:30
回答 1查看 375关注 0票数 1

假设我有一张这样的桌子

代码语言:javascript
运行
复制
id     col1    col2
---------------------
 1      35      A
 2      40      B
 3      39      B
 4      39      B
 5      39      B
 6      40      B
 7      39      B
 8      39      B
 9      40      B
10      40      C
11      35      C

我怎样做才能得到这样的结果:

代码语言:javascript
运行
复制
id     col1    col2
---------------------
 1      35      A
 2      40      B
 3      39      B
 6      40      B
 7      39      B
 9      40      B
10      40      C
11      35      C

我希望group by col1在相邻行中具有相同的值,而在col2中也有相同的组( id:9id:10中的col1值不能分组,因为它有不同的col2值)。

任何帮助都将不胜感激,谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-04 20:54:03

关键思想是获取相邻行的分组标识符。问题是:对于应该分组的行,行的什么特性是常量?

这里有一个:组中的所有行(基于id)在col1col2中具有不同值的前一行数是相同的。

您可以将此观察转化为每一行的度量(使用关联子查询)。其余的只是聚合:

代码语言:javascript
运行
复制
select min(id) as id col1, col2, count(*) as NumInGroup
from (select t.*,
             (select count(*)
              from t t2
              where t2.id < t.id and (t2.col1 <> t.col1 or t2.col2 <> t.col2)
             ) as grp
      from t
     ) t
group by grp, col1, col2;

注意:这将是很好的工作-足够对少量的数据,但它不是特别好的规模。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34599599

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档