甲骨文排名有条件

时间:2015-09-16 21:16:59

标签: sql oracle

我目前正在尝试根据自定义条件对结果进行排名。我们假设我的数据如下所示:

col1   col2    col3     
-----------------------
1       1       2       
1       3       33   
2       4       5   
3       6       40  
1       2       5
3       5       10 

我现在想要按col1分组并按col2排序,然后对结果进行排名。但是,如果col3大于30,我只想提高等级。所以结果应该如下:

col1   col2    col3    rank     
-----------------------------
1       1       2       1   
1       2       5       1
1       3       33      2  
2       4       5       1 
3       5       10      1 
3       6       40      2

我无法找到问题的优雅解决方案。如果我只使用经典排名,那么整个事情当然不起作用; e.g:

RANK() OVER (PARTITION BY col1 ORDER BY col2)

如果可能的话,由于性能问题,我想在这里使用窗口函数。我也在Google的Bigquery环境中工作。

2 个答案:

答案 0 :(得分:2)

如何使用条件逻辑?这可能会做你想要的:

RANK() OVER (PARTITION BY col1
             ORDER BY (CASE WHEN col3 < 30 THEN 1 ELSE 30 END)
            )

答案 1 :(得分:2)

这样的东西似乎有效。我没有执行this.getlistdata.setAdapter(new GetAllSongs(jsonArray, getActivity())) ,而是对rank值大于30的行数进行累积求和。

col3

此版本的sqlfiddle也可用。