我目前正在尝试根据自定义条件对结果进行排名。我们假设我的数据如下所示:
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环境中工作。
答案 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也可用。