gpt4 book ai didi

sql - 获取队列重复相同值的计数

转载 作者:太空狗 更新时间:2023-10-30 01:55:53 25 4
gpt4 key购买 nike

给定这样的表/数据:

WITH T(col1, col2) AS(
SELECT 1, 'A' FROM DUAL
UNION ALL
SELECT 2, 'B' FROM DUAL
UNION ALL
SELECT 3, 'B' FROM DUAL
UNION ALL
SELECT 4, 'B' FROM DUAL
UNION ALL
SELECT 5, 'A' FROM DUAL
UNION ALL
SELECT 6, 'B' FROM DUAL
UNION ALL
SELECT 7, 'B' FROM DUAL
UNION ALL
SELECT 8, 'A' FROM DUAL
)

我需要获取 col2 队列重复计数,我的意思是,当行按 col1 排序时,在 col2 中重复相同值的次数/p>

结果必须是:

col1 | col2 | queue_count
-------------------------
1 |A |1
2 |B |3
3 |B |3
4 |B |3
5 |A |1
6 |B |2
7 |B |2
8 |A |1

我尝试了一些分析函数,但没有取得理想的结果。

可以在“纯”SQL 中执行此操作吗?不使用pl/sql(不循环和逐行处理等)

最佳答案

这是一个缺口和孤岛问题。这是解决它的一种方法:

select col1, col2,
count(*) over (partition by col2, seqnum - seqnum_col2) as queue_count
from (select t.*,
row_number() over (partition by col2 order by col1) as seqnum_col2,
row_number() over (order by col1) as seqnum
from t
) t;

很难解释为什么会这样。但是,如果您运行子查询并查看结果,您可能会“明白”为什么行号之间的差异可以识别 col2 中具有相同值的相邻行。

关于sql - 获取队列重复相同值的计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40452215/

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