查找 hive 中的第 n 个值

Find the nth value in hive

我正在尝试确定第 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 运行 如果它有帮助

您需要 partition 按一个值 order 按另一个值 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().