在hive中找到第n个值

时间:2017-08-14 13:36:59

标签: sql hive hiveql hue

我正在尝试识别第N个分数值,这也取决于另一个变量。

例如,我想查看每个人的第n个交易金额,我现在遇到的问题是我的RANK没有重新开始每个名字的n计数,它只是像行计数一样继续输出: 语法示例:

    SELECT name, txn_amount, dense_rank() over (order by name,txn_amount desc ) as nth_value FROM payment_table 

非常感谢任何帮助。

P.S如果有帮助,我正在使用HIVE来运行

1 个答案:

答案 0 :(得分:0)

您需要分区一个值,另一个 order

SELECT name, txn_amount,
FROM (SELECT pt.*,
             dense_rank() over (partition by name order by txn_amount desc ) as nth_value
      FROM payment_table pt
     ) pt
WHERE nth_value = X;

需要子查询才能获得特定值。如果您想在同一行中有多个值,则可以使用GROUP BY

SELECT name,
       MAX(CASE WHEN nth_value = 1 THEN txn_amount END) as value_1,
       MAX(CASE WHEN nth_value = 2 THEN txn_amount END) as value_2
FROM (SELECT pt.*,
             dense_rank() over (partition by name order by txn_amount desc ) as nth_value
      FROM payment_table pt
     ) pt
WHERE nth_value = X
GROUP BY name;

注意:DENSE_RANK()将忽略重复项。如果你想看到那些(所以第二个值可能与第一个值具有相同的值),然后使用ROW_NUMBER()