查找 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()
.
我正在尝试确定第 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()
.