我在 PostgreSQL 上有这个表,但我在 Oracle DB 上测试它。 我需要提取计数数据来检查开始和结束的次数 值(value)重演
CREATE TABLE MY_TABLE
(
KEY VARCHAR2(100 BYTE),
ID NUMBER,
VALUE VARCHAR2(2000 BYTE)
);
具有这些值:
INSERT INTO my_table VALUES ('Dia-001', 1, 'welcome');
INSERT INTO my_table VALUES ('Dia-002', 1, 'welcome');
INSERT INTO my_table VALUES ('Dia-002', 2, 'condizioni_app1');
INSERT INTO my_table VALUES ('Dia-002', 3, 'condizioni');
INSERT INTO my_table VALUES ('Dia-003', 1, 'welcome');
INSERT INTO my_table VALUES ('Dia-003', 2, 'condizioni_app1');
INSERT INTO my_table VALUES ('Dia-003', 3, 'condizioni_app2');
我想得到这个结果
VALUE NEXT COUNT
welcome condizioni_app1 2
condizioni_app1 condizioni 1
condizioni_app1 condizioni_app2 1
注意:如果KEY字段中的值为单个,则不计入
(例如 KEY 'Dia-001')。
必须计算所有成对的值。例如,对于 key “Dia-002”,我们有
对 welcome/condizioni_app1, condizioni_app1/condizioni (id 1 and 2, 2 and
3).
最佳答案
一个选项是 Postgres 的 lead
window function :
select value
, next_value
, count(*)
from (
select value
, lead(value) over (partition by key order by id) as next_value
from MY_TABLE
) sub
where next_value is not null
group by
value
, next_value
或者您可以使用自连接来查找同一键的下一个值:
select t1.value
, t2.value
, count(*)
from MY_TABLE t1
join MY_TABLE t2
on t1.KEY = t2.KEY
and t1.ID = t2.ID - 1
group by
t1.value
, t2.value
关于sql - PostgreSQL/Oracle => 查询以对层次值进行分组和计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50358139/