2

Hive にテーブルが 1 つありますtable1。テーブルからデータを取得するためにimpalaを使用しています

table1
------
name, amount

テーブルの値はどこにありますか

test1, 10
test1, 15
test1, 30

test2, 30
test2, 40
test2, 50

test3, 30
test3, 40
test3, 50

ここで、すべてのデータをフェッチするように、table1 からデータをフェッチする必要がありますname (test1, test2, test3) but gives only top 2 records based on amount for each name

Can it possible in IMPALa or even in MYSQL?

前もって感謝します

4

3 に答える 3

1

Impala 2.0 以降を使用している場合は、分析関数を使用してこのタスクを実行できます。

SELECT name, amount
FROM (SELECT name, amount, row_number() OVER (PARTITION BY name ORDER BY amount DESC) AS pos
      FROM table1) t
WHERE pos < 3;

MySQL を使用する必要がある場合、StackOverflow に関する別の質問で示されているように、ユーザー定義変数を使用してウィンドウ関数を偽造できるようです。

于 2014-04-27T00:55:46.297 に答える
1

regexp_extract連結量の制限を取得するために使用できます。{1,1}はトップ 2{1,49}を表示します。 はトップ 50 を表示します。

例 (トップ 2):

>select name, regexp_extract(group_concat(cast(amount as string),','), '^(([0-9]+,)<b>{1,1}</b>[0-9]+|[0-9]+)',0) as top_two_amount from (select name, amount from table1 order by name, amount desc) t group by name;
于 2014-11-29T15:49:06.290 に答える