Todos os produtos
Search
Central de documentação

MaxCompute:QUALIFY

Última atualização: Aug 21, 2026

A cláusula QUALIFY aplica-se a window functions assim como a cláusula HAVING se aplica a funções de agregação: filtra linhas com base nos resultados das funções de janela, sem exigir subconsulta.

Ordem de execução

Em uma instrução SELECT, a cláusula QUALIFY é executada após a avaliação das funções de janela:

  1. FROM

  2. WHERE

  3. GROUP BY

  4. HAVING

  5. WINDOW

  6. QUALIFY

  7. DISTINCT

  8. ORDER BY

  9. LIMIT

Sintaxe

QUALIFY <expression>

Substitua <expression> por qualquer expressão de filtro que referencie uma função de janela.

Observações de uso

A cláusula QUALIFY deve conter pelo menos uma função de janela. Referencie a função de janela diretamente no predicado QUALIFY ou use um alias de coluna definido na lista SELECT.

O uso de QUALIFY sem uma função de janela retorna o seguinte erro:

FAILED: ODPS-0130071:[3,1] Semantic analysis exception - use QUALIFY clause without window function

Exemplo inválido:

SELECT *
FROM values (1, 2) t(a, b)
QUALIFY a > 1;

Exemplos

Simplificar a filtragem de funções de janela

Os exemplos a seguir produzem o mesmo resultado com a função de janela SUM e comparam as abordagens com subconsulta e com QUALIFY.

Sem QUALIFY — abordagem com subconsulta:

SELECT col1, col2
FROM
(
  SELECT
    t.a AS col1,
    sum(t.a) OVER (PARTITION BY t.b) AS col2
  FROM values (1, 2),(2,3) t(a, b)
)
WHERE col2 > 1;

Com QUALIFY — uso de alias de coluna:

SELECT
  t.a AS col1,
  sum(t.a) OVER (PARTITION BY t.b) AS col2
FROM values (1, 2),(2,3) t(a, b)
QUALIFY col2 > 1;

-- Result:
+------+------------+
| col1 | col2       |
+------+------------+
| 2    | 2          |
+------+------------+

Com QUALIFY — função de janela direta no predicado:

SELECT t.a AS col1,
  sum(t.a) OVER (PARTITION BY t.b) AS col2
FROM values (1, 2),(2,3) t(a, b)
QUALIFY sum(t.a) OVER (PARTITION BY t.b) > 1;

-- Result:
+------+------------+
| col1 | col2       |
+------+------------+
| 2    | 2          |
+------+------------+

Usar filtro de subconsulta em QUALIFY

A cláusula QUALIFY aceita expressões de filtro complexas, incluindo subconsultas:

SELECT *
FROM values (1, 2),(2,3) t(a, b)
QUALIFY sum(t.a) OVER (PARTITION BY t.b) IN (SELECT a FROM <table_name>);

Combinar WHERE, GROUP BY, HAVING e QUALIFY

O exemplo abaixo demonstra a interação entre QUALIFY e as demais cláusulas de filtragem. Cada cláusula atua em uma etapa diferente da execução:

SELECT a, b, max(c)
FROM values (1, 2, 3),(1, 2, 4),(1, 3, 5),(2, 3, 6),(2, 4, 7),(3, 4, 8) t(a, b, c)
WHERE a < 3
GROUP BY a, b
HAVING max(c) > 5
QUALIFY sum(b) OVER (PARTITION BY a) > 3;

-- Result:
+------+------+------+
| a    | b    | _c2  |
+------+------+------+
| 2    | 3    | 6    |
| 2    | 4    | 7    |
+------+------+------+
  • WHERE a < 3 — exclui linhas em que a = 3 antes da agregação

  • HAVING max(c) > 5 — remove grupos agregados com valor máximo igual ou inferior a 5

  • QUALIFY sum(b) OVER (PARTITION BY a) > 3 — filtra o resultado da função de janela após a conclusão da agregação