sql - 如何添加计数以对 SQL Hive 中的空值进行排名?
问题描述
这就是我现在所拥有的:
| time | car_id | order | in_order |
|-------|--------|-------|----------|
| 12:31 | 32 | null | 0 |
| 12:33 | 32 | null | 0 |
| 12:35 | 32 | null | 0 |
| 12:37 | 32 | 123 | 1 |
| 12:38 | 32 | 123 | 1 |
| 12:39 | 32 | 123 | 1 |
| 12:41 | 32 | 123 | 1 |
| 12:43 | 32 | 123 | 1 |
| 12:45 | 32 | null | 0 |
| 12:47 | 32 | null | 0 |
| 12:49 | 32 | 321 | 1 |
| 12:51 | 32 | 321 | 1 |
我正在尝试对订单进行排名,包括那些具有空值的订单,在这种情况下是按 car_id。这是我正在寻找的结果:
| time | car_id | order | in_order | row |
|-------|--------|-------|----------|-----|
| 12:31 | 32 | null | 0 | 1 |
| 12:33 | 32 | null | 0 | 1 |
| 12:35 | 32 | null | 0 | 1 |
| 12:37 | 32 | 123 | 1 | 2 |
| 12:38 | 32 | 123 | 1 | 2 |
| 12:39 | 32 | 123 | 1 | 2 |
| 12:41 | 32 | 123 | 1 | 2 |
| 12:43 | 32 | 123 | 1 | 2 |
| 12:45 | 32 | null | 0 | 3 |
| 12:47 | 32 | null | 0 | 3 |
| 12:49 | 32 | 321 | 1 | 4 |
| 12:51 | 32 | 321 | 1 | 4 |
我只是不知道如何管理空值的计数。谢谢!
解决方案
您可以在每行之前计算非 NULL 值的数量,然后使用dense_rank()
:
select t.*,
dense_rank() over (partition by car_id order by grp) as row
from (select t.*,
count(order) over (partition by car_id order by time) as grp
from t
) t;
推荐阅读
- python-3.x - 如何在 odoo 11 中使用函数标签强制修改 product_price 的值?
- reactjs - 开玩笑地在 useEffect 中测试restapi
- html - h1 标题标题没有响应我的网站
- javascript - 在博客中将谷歌字体添加到我的博客时,我在标题部分出现错误
- instagram-graph-api - 如何使用 instagram graph api 获取用户电子邮件和全名
- javascript - 更改 jQuery 中继器删除按钮的效果
- split - 如何在pytorch中拆分文件夹中的数据集?
- snowflake-cloud-data-platform - 我是否需要拥有该对象才能在雪花中访问它?
- python - 如何在 Tensorflow 2.0 数据集中动态更改批量大小?
- html - 我在哪里可以找到我的 github 静态网页的实时 html?