分组取出每组数据的前N条

本文将为您介绍如何对数据进行分组,取出每组数据的前N条数据。

示例数据

empno

ename

job

sal

7369

SMITH

CLERK

800.0

7876

SMITH

CLERK

1100.0

7900

JAMES

CLERK

950.0

7934

MILLER

CLERK

1300.0

7499

ALLEN

SALESMAN

1600.0

7654

MARTIN

SALESMAN

1250.0

7844

TURNER

SALESMAN

1500.0

7521

WARD

SALESMAN

1250.0

实现方法

您可以通过以下两种方法实现:

  • 取出每条数据的行号,再用WHERE语句进行过滤。

    SELECT * FROM (
      SELECT empno
      , ename
      , sal
      , job
      , ROW_NUMBER() OVER (PARTITION BY job ORDER BY sal) AS rn
      FROM emp
    ) tmp
    WHERE rn < 10;
  • 使用UDTF实现Split函数。

    详情请参见MaxCompute 学习计划中最后的示例。此方法可以更迅速地判断当前的序号,如果当前序号已经超过指定的条数(例如10条),便不再处理,从而提高计算效率。