Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

SELECT ARRAY_LENGHT para contabilizar registros

Na aula 03.03, fiquei com uma dúvida.

Este codigo que o professor mostrou, traz como resultado o número de elementos dentro de uma estrutura:

SELECT ARRAY_LENGTH(resultado_Consulta) FROM
(SELECT [
    STRUCT (1 AS produto, 1 AS cliente, [3443.7999999999993, 1562.2299999999998, 776.86]
    as array_Faturamento),
    STRUCT (1 AS produto, 2 AS cliente, [3855.0000000000005, 2316.4099999999994, 1331.76]
    as array_Faturamento) 
] AS Resultado_Consulta);

Pensando nisso, tentei fazer o mesmo com o objetivo de contar os registros de uma consulta (a principio sem nenhum filtro "where"):

SELECT
  ARRAY_LENGTH(numero_de_linhas)
FROM
  (
    SELECT
      [STRUCT(CLI.nome AS nomes)] AS array_clientes
    FROM
      `beleza_verde_vendas.clientes` AS CLI
  )
AS
  numero_de_linhas;

Porem recebo um erro

No matching signature for function ARRAYLENGTH for argument types: STRUCT<arrayclientes ARRAY<STRUCT>>. Supported signature: ARRAYLENGTH(ARRAY) at [2:3]

Estou fazendo algo errado e não consigo entender onde. Poderiam me dar uma luz? Obrigado.

2 respostas
solução!

Olá, Pablo, como vai?

A mensagem de erro informa que "Nenhuma assinatura correspondente para a função ARRAY_LENGTH para tipos de argumento: STRUCT<array_clientes ARRAY<STRUCT>>. Assinatura suportada: ARRAY_LENGTH(ARRAY) em [2:3]". Ou seja, o erro ocorre porque a função ARRAY_LENGTH espera um argumento do tipo array, mas você está tentando passar diretamente um STRUCT que contém um array dentro dele.

Para contar os registros, você deve garantir que o que está sendo passado para a função seja realmente um array.

Peço que tente o seguinte código:

SELECT
  ARRAY_LENGTH(array_clientes) AS total_clientes
FROM
  (
    SELECT
      ARRAY(SELECT STRUCT(CLI.nome AS nomes) FROM `beleza_verde_vendas.clientes` AS CLI) AS array_clientes
  )

Se precisar de mais ajuda, sinta-se à vontade para perguntar.

O fórum está à disposição!

Abraços!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado

Muito obrigado. Percebi que isto é apenas uma forma mais complicada de fazer algo mais simples...rsrs...

SELECT
  COUNT(CLI.nome) AS total_clientes
FROM
  `beleza_verde_vendas.clientes` AS CLI;