Sql Oracle sum 1按分区计数
我想根据前6列计算所需的计数。对于用户id、会话id和原始id的每个分区(按等级升序排列),我想从1开始,每次lag_agse列等于“ACCESS”时添加一个分区。请在下表中找到我想要的内容Sql Oracle sum 1按分区计数,sql,oracle,Sql,Oracle,我想根据前6列计算所需的计数。对于用户id、会话id和原始id的每个分区(按等级升序排列),我想从1开始,每次lag_agse列等于“ACCESS”时添加一个分区。请在下表中找到我想要的内容 我觉得你在找 select user_id, session_id, orig_id, type, lag_agse, rank_agse, count(case when type = 'ACCESSED' then 1 end) over (partition
我觉得你在找
select user_id, session_id, orig_id, type, lag_agse, rank_agse,
count(case when type = 'ACCESSED' then 1 end)
over (partition by user_id, session_id, orig_id
order by rank_agse) as desired_count
from your_table
order by user_id, session_id, orig_id, rank_agse desc
;
请参见我在您的问题下关于升序与降序的评论,按RANK\u AGSE
请注意,
count()。您说过,在每个分区中,当按排名降序时,必须计算“访问的”
。那么,在第一行,为什么计数是2而不是0?您的输出看起来像是为了“运行计数”而按RANK\u AGSE
升序排列,然后查询输出按RANK\u AGSE
降序排列。请澄清,对不起,你是对的。我的意思是升序。所以,他们在这里输入的是分区部分之后的顺序,以便让Oracle知道,只有升序才能进行计数?@Javitore-是的。该总和始终是某个排序上的“累积”总和;但默认情况下,如果不指定顺序,分区中的所有行都是“绑定”(相等顺序),因此总和将覆盖整个分区。如果即使使用order by
子句,仍然可以使用领带,您必须小心-那么期望的结果是什么?有各种各样的选项,所有这些都可以通过分析函数来处理,但您必须首先了解业务问题(在考虑“编程”解决方案之前)。不知道Oracle如此强大,在您提出此解决方案之前,我甚至尝试过使用光标!