我正在尝试识别第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来运行
答案 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()
。