Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Oracle sum 1按分区计数_Sql_Oracle - Fatal编程技术网

Sql Oracle sum 1按分区计数

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

我想根据前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 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如此强大,在您提出此解决方案之前,我甚至尝试过使用光标!