hivesql求百分比
时间: 2023-08-19 13:07:56 浏览: 147
在HiveSQL中,可以使用NTILE函数来计算百分比。NTILE函数的语法是:ntile(num) over (\[partition_clause\] order_by_clause),其中num表示要将数据分成的桶的数量。然后可以根据桶号,选取前或后n分之几的数据。数据会完整展示出来,只是给相应的数据打上标签。具体要取几分之几的数据,需要再嵌套一层根据标签取出。需要注意的是,NTILE函数不支持ROWS BETWEEN语法。例如,NTILE(2) OVER(PARTITION BY cookieid ORDER BY createtime ROWS BETWEEN 3 PRECEDING AND CURRENT ROW)是错误的写法。\[1\]
对于求百分比的问题,可以使用NTILE函数来实现。例如,如果要求支付金额前20%的用户,可以先使用NTILE函数将用户按照支付金额进行分桶,然后选择桶号为1的用户。具体的SQL语句如下:
```
select a.user_id, a.sum_pay_amount, a.level
from (
select user_id, sum(pay_amount) as sum_pay_amount, ntile(5) over(order by sum(pay_amount) desc) as level
from user_trade
group by user_id
) a
where a.level = 1
```
以上SQL语句将用户按照支付金额进行分组,并计算每个用户的支付金额总和。然后使用NTILE函数将用户分成5个桶,并给每个用户打上对应的标签。最后,选择桶号为1的用户,即支付金额最高的20%的用户。\[3\]
#### 引用[.reference_title]
- *1* *2* *3* [HiveSql面试题12--分桶问题(数据求前或后百分比问题)](https://blog.csdn.net/godlovedaniel/article/details/108405758)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
阅读全文