percent_rank() over
时间: 2023-04-26 14:01:36 浏览: 251
`percent_rank() over` 是一种窗口函数,用于计算当前行在整个结果集中的排名百分比。它返回一个介于 0 和 1 之间的小数,表示当前行在结果集中的排名百分比。例如,如果结果集中有 10 行,当前行排名第 5,则 `percent_rank() over` 返回 0.5。
相关问题
select *, percent_rank() over(partition by user_id order by money desc) as alias_percent_rank from order_for_goods;
这是一条 SQL 查询语句,它使用了窗口函数 `percent_rank()` 来计算每个 `user_id` 分组中 `money` 字段的排名百分比,并将结果存储在名为 `alias_percent_rank` 的别名列中。该查询语句会返回 `order_for_goods` 表中的所有列和计算出的百分比排名列。
PERCENT_RANK() over(partition by i_e_flag,cargo_section_code order by ROUND(SUM(COALESCE(goods_gross_value_usd,0))/10000,2)) as percent_rank
`PERCENT_RANK()` 是SQL中的一个窗口函数,用于计算分区内每行的百分比排名。这个函数是按照给定的分区(`PARTITION BY`子句)和排序(`ORDER BY`子句)来计算的。具体来说,它返回每个分区中当前行的排名与该分区中所有行数(包括当前行)的比值减去1。排名是通过`ORDER BY`子句中定义的顺序来决定的。
在您给出的例子中,`PERCENT_RANK()` 函数被用于计算按`i_e_flag`和`cargo_section_code`分区后的每个分区内的`percent_rank`。排序依据是按照`goods_gross_value_usd`的总和除以10000后四舍五入的值进行排序,这个值代表了某种货物总价值的计算方式。
这里是一个简化的解释:
- `PARTITION BY i_e_flag, cargo_section_code`:按照`i_e_flag`和`cargo_section_code`的组合进行分组,每个组内独立计算排名。
- `ORDER BY ROUND(SUM(COALESCE(goods_gross_value_usd,0))/10000,2)`:在每个分组内,先计算`goods_gross_value_usd`的总和,如果为`null`则使用`COALESCE`函数将其替换为0,然后除以10000并四舍五入到小数点后两位,最后按照这个结果进行排序。
- `PERCENT_RANK() as percent_rank`:计算每个分组内按上述排序方式排列后的行的百分比排名。
公式可以这样理解:
```
percent_rank = (当前行排名 - 1) / (分区内的总行数 - 1)
```
如果分区内的行数为1,则该行的`percent_rank`为NULL,因为没有其他行来进行比较。
阅读全文