Mysql - 需要IMPALA查询帮助

时间:2014-02-06 05:33:30

标签: mysql impala

我在hive 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?

提前致谢

3 个答案:

答案 0 :(得分:1)

如果您使用的是Impala 2.0或更高版本,则可以使用analytic functions来完成此任务:

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,你可以使用user-defined variables伪造窗口函数,如another question on StackOverflow中所示。

答案 1 :(得分: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;

答案 2 :(得分:0)

我很难理解你的问题,但如果我理解正确的话,你就会试图按名称列出所有金额。如果是这种情况,在MySQL中,这非常简单:

  SELECT name, GROUP_CONCAT( amount ) AS amounts FROM table1 GROUP BY name ;

这将为每个名称提供一行,其中包含与该名称相关联的所有金额。