Categorias:

Funções de agregação (Geral) , Funções de janela (Quadro de janela)

MIN

Retorna o valor mínimo para os registros dentro de expr. NULL são ignorados, a menos que todos os registros sejam NULL, caso em que um valor NULL é retornado.

Consulte também

COUNT , SUM , MAX

Sintaxe

Função de agregação

MIN( <expr> )
Copy

Função de janela

MIN( <expr> ) [ OVER ( [ PARTITION BY <expr1> ] [ ORDER BY <expr2> [ <window_frame> ] ] ) ]
Copy

Para obter mais detalhes sobre a sintaxe window_frame, consulte Sintaxe e utilização do quadro de janela.

Retornos

O tipo de dados do valor retornado é o mesmo que o tipo de dados dos valores de entrada.

Notas de uso

  • Para compatibilidade com outros sistemas, você pode especificar a palavra-chave DISTINCT como argumento para a função, mas ela não tem nenhum efeito.

  • Se a função for chamada como uma função de janela, a janela pode incluir um window_frame opcional. O window_frame (seja cumulativo ou deslizante) especifica o subconjunto de linhas dentro da janela para o qual os valores somados são retornados. Se nenhum window_frame for especificado, o padrão é o seguinte quadro cumulativo de janela (de acordo com o padrão ANSI para funções de janela):

    RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW

    Para obter mais detalhes sobre quadros de janela, incluindo sintaxe e exemplos, consulte Sintaxe e utilização do quadro de janela.

Detalhes do agrupamento

  • The comparisons follow the collation based on the input arguments” collations and precedences.

  • The collation of the result is the same as the collation of the input.

Exemplos

Os exemplos a seguir demonstram como utilizar a função MIN.

Criar uma tabela e dados:

CREATE OR REPLACE TABLE sample_table(k CHAR(4), d CHAR(4));

INSERT INTO sample_table VALUES
    ('1', '1'), ('1', '5'), ('1', '3'),
    ('2', '2'), ('2', NULL),
    ('3', NULL),
    (NULL, '7'), (NULL, '1');
Copy

Exibir os dados:

SELECT k, d
    FROM sample_table
    ORDER BY k, d;
Copy
+------+------+
| K    | D    |
|------+------|
| 1    | 1    |
| 1    | 3    |
| 1    | 5    |
| 2    | 2    |
| 2    | NULL |
| 3    | NULL |
| NULL | 1    |
| NULL | 7    |
+------+------+

Use a função MIN para recuperar o menor valor na coluna denominada d:

SELECT MIN(d) FROM sample_table;
Copy
+--------+                                                                      
| MIN(D) |
|--------|
| 1      |
+--------+

Combine a cláusula GROUP BY com a função MIN para recuperar os menores valores em cada grupo (onde cada grupo é baseado no valor da coluna k):

SELECT k, MIN(d)
  FROM sample_table 
  GROUP BY k
  ORDER BY k;
Copy
+------+--------+                                                               
| K    | MIN(D) |
|------+--------|
| 1    | 1      |
| 2    | 2      |
| 3    | NULL   |
| NULL | 1      |
+------+--------+

Use uma cláusula PARTITION BY para dividir os dados em grupos com base no valor de k. Isso é semelhante, mas não idêntico, ao uso de GROUP BY. Em especial, GROUP BY produz uma linha de saída por grupo, enquanto PARTITION BY produz uma linha de saída por linha de entrada.

SELECT k, d, MIN(d) OVER (PARTITION BY k)
  FROM sample_table
  ORDER BY k, d;
Copy
+------+------+------------------------------+                                  
| K    | D    | MIN(D) OVER (PARTITION BY K) |
|------+------+------------------------------|
| 1    | 1    | 1                            |
| 1    | 3    | 1                            |
| 1    | 5    | 1                            |
| 2    | 2    | 2                            |
| 2    | NULL | 2                            |
| 3    | NULL | NULL                         |
| NULL | 1    | 1                            |
| NULL | 7    | 1                            |
+------+------+------------------------------+

Use uma cláusula de janela ORDER BY para criar uma janela deslizante com duas linhas de largura, e produza o valor mais baixo dentro daquela janela. (Lembre-se de que ORDER BY na cláusula de janela é separado de ORDER BY no nível de instrução). Este exemplo usa uma única partição, portanto não há cláusula PARTITION BY na cláusula OVER().

SELECT k, d, MIN(d) OVER (ORDER BY k, d ROWS BETWEEN 1 PRECEDING AND CURRENT ROW)
  FROM sample_table
  ORDER BY k, d;
Copy
+------+------+----------------------------------------------------------------------+
| K    | D    | MIN(D) OVER (ORDER BY K, D ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) |
|------+------+----------------------------------------------------------------------|
| 1    | 1    | 1                                                                    |
| 1    | 3    | 1                                                                    |
| 1    | 5    | 3                                                                    |
| 2    | 2    | 2                                                                    |
| 2    | NULL | 2                                                                    |
| 3    | NULL | NULL                                                                 |
| NULL | 1    | 1                                                                    |
| NULL | 7    | 1                                                                    |
+------+------+----------------------------------------------------------------------+