2017-08-14 49 views
1

我想確定也取決於另一個變量的第N個分值。找到配置單元中的第n個值

例如我想查看每個人的第n個交易金額,我現在的問題是我的RANK不會重新開始每個名稱的n的計數,它只是繼續向下輸出,如行數: 語法示例:

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

任何幫助,非常感謝。

PS我使用HIVE運行此如果它可以幫助

+1

您需要按名稱和順序按txn_amount desc進行分區。 –

+0

謝謝你vkp你可以把這個例子,以確保我做到這一點正確 –

回答

0

您可以通過一個值和爲了需要分區被其他:

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()

+0

戈登 - 非常感謝你,這已經解決了這個問題,是的,我正在測試輸出,行號和密集排名。非常快速的反應,非常明顯 –