本文将为您介绍如何对数据进行分组,取出每组数据的前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条),便不再处理,从而提高计算效率。