csh*_*in9 4 sql google-bigquery
假设我有下表:
col
NULL
1
1
2
Run Code Online (Sandbox Code Playgroud)
然后我选择:
SELECT col, DENSE_RANK() OVER(ORDER BY col) as rnk from table
Run Code Online (Sandbox Code Playgroud)
然后我得到:
col rnk
NULL 1
1 2
1 2
2 3
Run Code Online (Sandbox Code Playgroud)
我想要得到的是这样的:
col rnk
NULL NULL
1 1
1 1
2 2
Run Code Online (Sandbox Code Playgroud)
但如果我查询:
SELECT col, CASE WHEN col IS NOT NULL THEN DENSE_RANK() OVER(ORDER BY col) END as rnk from table
Run Code Online (Sandbox Code Playgroud)
然后我得到:
col rnk
NULL NULL
1 2
1 2
2 3
Run Code Online (Sandbox Code Playgroud)
NULL
除了使用子句之外,还有其他方法可以在排名时忽略 s 吗WHERE
?我还有一些其他列,其行不能省略。
使用partition by
:
SELECT col,
(CASE WHEN col IS NOT NULL
THEN DENSE_RANK() OVER (PARTITION BY (CASE WHEN col IS NOT NULL THEN 1 ELSE 2 END)
ORDER BY col
)
END) as rnk
FROM table;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4608 次 |
最近记录: |