需要在 SQL 中对值进行分组

Posted

技术标签:

【中文标题】需要在 SQL 中对值进行分组【英文标题】:Need to group values in SQL 【发布时间】:2020-10-08 15:06:52 【问题描述】:

下面是我的表数据结构。

select 100 id,  1   srno,0 amt from dual
union all
select 100 id,  2   srno,       1000 amt from dual
union all
select 100 id,  3   srno,       1000 amt from dual
union all
select 100 id,  4    srno,      0 amt from dual
union all
select 100 id,  5   srno,       2000 amt from dual

我想要这样的结果,

ID   From_Srno     To_Srno     amt
100   1               1         0
100   2               3         1000
100   4               4         0
100   5               5         2000

谢谢, 名气

【问题讨论】:

请说明您要实现的逻辑。不明显。 【参考方案1】:

这读作是一个间隙和孤岛问题,您希望将具有相同amt 的“相邻”行组合在一起。

我建议使用行号之间的差异来定义组:

select id, min(srno) from_srno, max(srno) max_srno, amt
from (
    select t.*, 
        row_number() over(partition by id order by srno) rn1,
        row_number() over(partition by id, amt order by srno) rn2
    from mytable t
) t
group by id, amt, rn1 - rn2

Demo on DB Fiddle

身份证 | FROM_SRNO | MAX_SRNO | AMT --: | --------: | --------: | ---: 100 | 1 | 1 | 0 100 | 2 | 3 | 1000 100 | 4 | 4 | 0 100 | 5 | 5 | 2000

【讨论】:

以上是关于需要在 SQL 中对值进行分组的主要内容,如果未能解决你的问题,请参考以下文章

如何在SQL中对相邻行进行分组并对数据求和

当值在sql中重复时如何对列进行分组

Scala:如何按键分组并在 scala 中对值求和并以预期的返回类型返回列表

需要在 tablix 的列中对表达式进行分组

通过 PHP 将 Sql 数据库转换为具有正确格式的 JSON,并在 PHP 脚本本身中对值进行排序

有没有办法从多个 URL 生成 Web 查询,而无需在 Excel 中对值进行硬编码?