0- 描述
描述:抽象分组–断点排序
表名:t13
表字段及内容:
a b
2014 1
2015 1
2016 1
2017 0
2018 0
2019 -1
2020 -1
2021 -1
2022 1
2023 1
1- 问题一
描述:断点排序
输出结果如下所示:
a b c
2014 1 1
2015 1 2
2016 1 3
2017 0 1
2018 0 2
2019 -1 1
2020 -1 2
2021 -1 3
2022 1 1
2023 1 2
参考答案:
select
a,
b,
row_number() over( partition by b,repair_a order by a asc) as c--按照b列和[b的组首]分组,排序
from
(
select
a,
b,
a-b_rn as repair_a--根据b列值出现的次序,修复a列值为b首次出现的a列值,称为b的[组首]
from
(
select
a,
b,
row_number() over( partition by b order by a asc ) as b_rn--按b列分组,按a列排序,得到b列各值出现的次序
from t13
)tmp1
)tmp2--注意,如果不同的b列值,可能出现同样的组首值,但组首值需要和a列值 一并参与分组,故并不影响排序。
order by a asc;