gpt4 book ai didi

sql - 如何在 SQL 中聚合有序的行子集?

转载 作者:行者123 更新时间:2023-12-04 20:45:12 25 4
gpt4 key购买 nike

假设我有一张 table t像这样填充:

x y z 
- - -
A 1 A
A 4 A
A 6 B
A 7 A
B 1 A
B 2 A

基本上,列 x 和 z 是随机字母和 y 随机数。

我想按如下方式聚合行:
x z min(y) max(y)
- - ------ ------
A A 1 4
A B 6 6
A A 7 7
B A 1 2

换句话说:假设行按 x、y 和 z 排序,请为每个连续的 x 和 z 组选择最小和最大 y。

请注意,此查询不是我需要的:
select x, z, min(y), max(y)
from t
group by x, z

因为这会导致以下不需要的结果:
x z min(y) max(y)
- - ------ ------
A A 1 7
A B 6 6
B A 1 2

所以问题是:有没有办法在 SQL 中表达我想要的内容?

(如果解决方案取决于 SQL 方言:首选 Oracle 解决方案。)

最佳答案

这里有一个解决方案,但我没有时间一步一步解释它:

select x, z, min(y), max(y)
from (
select b.* , sum(switch) over (order by rn) as grp_new
from(
select a.* ,
case when grp = (lag(grp) over (order by rn))
then 0
else 1 end as switch
from
(select x,y,z,
dense_rank() over (order by x, z) as grp,
row_number() over (order by x, y, z) rn
from t
)a
)b
)c
group by x, z, grp_new
order by grp_new

SQLFIDDLE to test it.

关于sql - 如何在 SQL 中聚合有序的行子集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19027436/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com